使用webpack/gulp构建TypeScript项目的方法示例


Posted in Javascript onDecember 18, 2019

总体来看,TypeScript项目构建主要分两步:

  1. 将ts 项目整体转换为js项目
  2. 按常规套路,对该 js 项目进行打包构建

构建过程中,对 ts 文件的转换不再使用命令行方式,所以 tsc 的配置参数,需要通过 tsconfig.json 文件设置。

初始化 tsconfig.json

tsc --init

之后,我们会在项目目录中得到一个完整冗长的 tsconfig.json 配置文件。这个文件暂且不必改动。

{
 "compilerOptions": {
  /* Basic Options */
  // "incremental": true,          /* Enable incremental compilation */
  "target": "es5",             /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */
  "module": "commonjs",           /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */
  // "lib": [],               /* Specify library files to be included in the compilation. */
  // "allowJs": true,            /* Allow javascript files to be compiled. */
  // "checkJs": true, ...
 }
}

使用webpack 构建

全局安装 webpack

npm i -g webpack webpack-cli

本地安装 ts-loader 和 typescript

npm i -D ts-loader typescript

创建 webpack.config.js

const path = require('path')
module.exports = {
  mode: 'production',
  entry: {
    main: './index.ts'
  },
  module: {
    rules: [
      {
        test: /\.ts$/,
        use: 'ts-loader',
        exclude: /node_modules/
      }
    ]
  },
  output: {
    filename: 'webpack-bundle.js',
    path: path.resolve(__dirname, 'dist'),
    libraryTarget: 'commonjs',
  },
  resolve: {
    extensions: ['.ts']
  }
}

运行webpack

经过上述配置之后,在控制台项目路径内,中直接运行 webpack 。

% webpack  
Hash: 1c028195d238a71fe1c7
Version: webpack 4.41.3
Time: 726ms
Built at: 2019/12/17 下午2:56:12
  Asset   Size Chunks       Chunk Names
index.js 1.61 KiB    0 [emitted] main
Entrypoint main = index.js
[0] ./a.ts 147 bytes {0} [built]
[1] ./b.ts 147 bytes {0} [built]
[2] ./index.ts 318 bytes {0} [built]
[3] ./c.ts 378 bytes {0} [built]

在dist 中,生成了一个转换且合并完成的webpack-bundle.js 文件。

使用 gule 构建

全局安装 gule

npm i -g gulp

本地安装

  • gulp
  • browserify
  • tsify
  • vinyl-source-stream
npm i -D gulp browserify tsify vinyl-source-stream

创建 gulpfile.js 文件

const gulp = require('gulp')
const tsify = require('tsify')
const browserify = require('browserify')
const source = require('vinyl-source-stream')

gulp.task('default', () => {
  return browserify({
    basedir: '.',
    debug: true,
    entries: ['index.ts'],
    cache: {},
    packageCache: {}
  }).plugin(tsify).bundle()
  .pipe(source('gulp-bundle.js'))
  .pipe(gulp.dest('dist'))
})

运行gulp

经过上述配置之后,在控制台项目路径内,中直接运行gulp 。

% gulp
[15:37:30] Using gulpfile ~/ts-learn/bundle/gulpfile.js
[15:37:30] Starting 'default'...
[15:37:32] Finished 'default' after 1.4 s

在dist 中,生成了一个转换且合并完成的gulp-bundle.js 文件。

配置npm 指令

我们将这两个指令整合到项目指令中:

"scripts": {
  "test": "ts-node test",
  "build-webpack": "webpack",
  "build-gulp": "gulp",
  "build": "npm run build-webpack"
}

这里分别针对webpack /gulp 添加了构建指令,并将build 指令设置为默认使用webpack 构建。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
传递参数的标准方法(jQuery.ajax)
Nov 19 Javascript
javascript Base类 包含基本的方法
Jul 22 Javascript
jquery判断checkbox(复选框)是否被选中的代码
Oct 20 Javascript
js冒泡、捕获事件及阻止冒泡方法详细总结
May 08 Javascript
在AngularJS应用中实现一些动画效果的代码
Jun 18 Javascript
详解JavaScript逻辑And运算符
Dec 04 Javascript
微信小程序 教程之条件渲染
Oct 18 Javascript
js入门之Function函数的使用方法【新手必看】
Nov 22 Javascript
JS常见疑难点分析之match,charAt,charCodeAt,map,search用法分析
Dec 25 Javascript
JavaScript数据类型的存储方法详解
Aug 25 Javascript
@angular前端项目代码优化之构建Api Tree的方法
Dec 24 Javascript
javascript实现点击小图显示大图
Nov 29 Javascript
小程序简单两栏瀑布流效果的实现
Dec 18 #Javascript
js数据类型转换与流程控制操作实例分析
Dec 18 #Javascript
vue不操作dom实现图片轮播的示例代码
Dec 18 #Javascript
使用JS来动态操作css的几种方法
Dec 18 #Javascript
基于ts的动态接口数据配置的详解
Dec 18 #Javascript
H5实现手机拍照和选择上传功能
Dec 18 #Javascript
如何使用webpack打包一个库library的方法步骤
Dec 18 #Javascript
You might like
PHPAnalysis中文分词类详解
2014/06/13 PHP
PHP抽奖算法程序代码分享
2015/10/08 PHP
CI(CodeIgniter)模型用法实例分析
2016/01/20 PHP
FireFox JavaScript全局Event对象
2009/06/14 Javascript
Javascript 复制数组实现代码
2009/11/26 Javascript
关于JS中match() 和 exec() 返回值和属性的测试
2016/03/21 Javascript
jQuery中借助deferred来请求及判断AJAX加载的实例讲解
2016/05/24 Javascript
jquery无法为动态生成的元素添加点击事件的解决方法(推荐)
2016/12/26 Javascript
JavaScript中for循环的几种写法与效率总结
2017/02/03 Javascript
Vue服务端渲染和Vue浏览器端渲染的性能对比(实例PK )
2017/03/31 Javascript
轻松玩转BootstrapTable(后端使用SpringMVC+Hibernate)
2017/09/06 Javascript
js字符限制(字符截取) 一个中文汉字算两个字符
2017/09/12 Javascript
angularjs实现分页和搜索功能
2018/01/03 Javascript
微信小程序实现图片上传功能实例(前端+PHP后端)
2018/01/10 Javascript
浅谈vue项目如何打包扔向服务器
2018/05/08 Javascript
js实现磁性吸附的示例
2020/10/26 Javascript
Python基于time模块求程序运行时间的方法
2017/09/18 Python
python Pandas 读取txt表格的实例
2018/04/29 Python
Python 获取中文字拼音首个字母的方法
2018/11/28 Python
python获取Linux发行版名称
2019/08/30 Python
python3中使用__slots__限定实例属性操作分析
2020/02/14 Python
浅谈Python中range与Numpy中arange的比较
2020/03/11 Python
Python xmltodict模块安装及代码实例
2020/10/05 Python
关于Python3的import问题(pycharm可以运行命令行import错误)
2020/11/18 Python
html5中 media(播放器)的api使用指南
2014/12/26 HTML / CSS
美国在线面料商店:Online Fabric Store
2018/07/26 全球购物
车库门开启器、遥控器和零件:Chamberlain
2019/04/09 全球购物
爱尔兰最大的体育零售商:Life Style Sports
2019/06/12 全球购物
工程师岗位职责规定
2014/02/26 职场文书
企业宣传方案
2014/03/04 职场文书
教师对学生的评语
2014/04/28 职场文书
班子四风对照检查材料思想汇报
2014/09/29 职场文书
中标通知书格式
2015/04/17 职场文书
社区党支部公开承诺书
2015/04/29 职场文书
springboot如何接收application/x-www-form-urlencoded类型的请求
2021/11/02 Java/Android
yolov5返回坐标的方法实例
2022/03/17 Python