使用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 相关文章推荐
ASP中用Join和Array,可以加快字符连接速度的代码
Aug 22 Javascript
Js 随机数产生6位数字
May 13 Javascript
分享一个自己动手写的jQuery分页插件
Aug 28 Javascript
JavaScript实现的双向跨域插件分享
Jan 31 Javascript
JS基于Ajax实现的网页Loading效果代码
Oct 27 Javascript
js实现网页收藏功能
Dec 17 Javascript
JavaScript知识点总结(十一)之js中的Object类详解
May 31 Javascript
Bootstrap 实现查询的完美方法
Oct 26 Javascript
html5+canvas实现支持触屏的签名插件教程
May 08 Javascript
使用JS组件实现带ToolTip验证框的实例代码
Aug 23 Javascript
JavaScript运行机制实例分析
Apr 11 Javascript
详解Vue2的diff算法
Jan 06 Vue.js
小程序简单两栏瀑布流效果的实现
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
php Smarty初体验二 获取配置信息
2011/08/08 PHP
PHP使用DES进行加密与解密的方法详解
2013/06/06 PHP
PHP实现登陆表单提交CSRF及验证码
2017/01/24 PHP
详细解读php的命名空间(一)
2018/02/21 PHP
JAVASCRIPT对象及属性
2007/02/13 Javascript
使用户点击后退按钮使效三行代码
2007/07/07 Javascript
从零开始学习jQuery (三) 管理jQuery包装集
2011/02/23 Javascript
js如何获取兄弟、父类等节点
2014/01/06 Javascript
node.js中的fs.write方法使用说明
2014/12/15 Javascript
js由下向上不断上升冒气泡效果实例
2015/05/07 Javascript
jQuery的each循环用法简单示例
2016/06/12 Javascript
jQuery实现模拟flash头像裁切上传功能示例
2016/12/11 Javascript
JS生成一维码(条形码)功能示例
2017/01/19 Javascript
Angular中响应式表单的三种更新值方法详析
2017/08/22 Javascript
Angular整合zTree的示例代码
2018/01/24 Javascript
js+css实现打字效果
2020/06/24 Javascript
详解Vue-cli webpack移动端自动化构建rem问题
2018/04/07 Javascript
微信小程序实现收藏与取消收藏切换图片功能
2018/08/03 Javascript
手把手带你封装一个vue component第三方库
2019/02/14 Javascript
vue实现拖拽效果
2019/12/23 Javascript
修改vue源码实现动态路由缓存的方法
2020/01/21 Javascript
vue-openlayers实现地图坐标弹框效果
2020/09/24 Javascript
[01:07:19]2018DOTA2亚洲邀请赛 4.5 淘汰赛 Mineski vs VG 第一场
2018/04/06 DOTA
python使用ctypes模块调用windowsapi获取系统版本示例
2014/04/17 Python
详解Python中__str__和__repr__方法的区别
2015/04/17 Python
Python定时器实例代码
2017/11/01 Python
python热力图实现简单方法
2021/01/29 Python
CSS3 box-sizing属性
2009/04/17 HTML / CSS
Maje德国官网:法国女性成衣品牌
2017/02/10 全球购物
比较一下entity bean和session bean
2013/12/27 面试题
幼儿园毕业家长感言
2014/02/10 职场文书
汉语言文学专业求职信
2014/06/19 职场文书
八荣八耻的活动方案
2014/08/16 职场文书
党员创先争优心得体会
2014/09/11 职场文书
实习证明模板
2015/06/16 职场文书
幼儿园中班教育随笔
2015/08/14 职场文书