使用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 相关文章推荐
帮助避免错误的Javascript陷阱清单
May 31 Javascript
isArray()函数(JavaScript中对象类型判断的几种方法)
Nov 26 Javascript
javascript算法学习(直接插入排序)
Apr 12 Javascript
JS自动缩小超出大小的图片
Oct 12 Javascript
javascript随机将第一个dom中的图片添加到第二个div中示例
Oct 08 Javascript
AngularJS中取消对HTML片段转义的方法例子
Jan 04 Javascript
javascript实现回车键提交表单方法总结
Jan 10 Javascript
微信小程序之滚动视图容器的实现方法
Sep 26 Javascript
AngularJs ng-change事件/指令的用法小结
Nov 01 Javascript
Bootstrap 模态框自定义点击和关闭事件详解
Aug 10 Javascript
ES6 Array常用扩展的应用实例分析
Jun 26 Javascript
简单了解JavaScript弹窗实现代码
May 07 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
利用文件属性结合Session实现在线人数统计
2006/10/09 PHP
PHP开发环境配置(MySQL数据库安装图文教程)
2010/04/28 PHP
php Notice: Undefined index 错误提示解决方法
2010/08/29 PHP
PHP setcookie设置Cookie用法(及设置无效的问题)
2011/07/13 PHP
Array of country list in PHP with Zend Framework
2011/10/17 PHP
php var_export与var_dump 输出的不同
2013/08/09 PHP
memcache命令启动参数中文解释
2014/01/13 PHP
destoon利用Rewrite规则设置网站安全
2014/06/21 PHP
php内嵌函数用法实例
2015/03/20 PHP
PHP表单数据写入MySQL数据库的代码
2016/05/31 PHP
Swoole4.4协程抢占式调度器详解
2019/05/23 PHP
Yii框架连表查询操作示例
2019/09/06 PHP
Javascript 获取LI里的内容
2008/12/17 Javascript
myeclipse安装jQuery插件的方法
2011/03/29 Javascript
jQuery对象初始化的传参方式
2015/02/26 Javascript
JS onkeypress兼容性写法详解
2016/04/27 Javascript
vue父子组件的嵌套的示例代码
2017/09/08 Javascript
详解开源的JavaScript插件化框架MinimaJS
2017/10/26 Javascript
ES6扩展运算符用法实例分析
2017/10/31 Javascript
JavaScript实现的前端AES加密解密功能【基于CryptoJS】
2018/08/28 Javascript
微信小程序自定义轮播图
2018/11/04 Javascript
谈谈JavaScript中super(props)的重要性
2019/02/12 Javascript
js实现简单掷骰子效果
2019/10/24 Javascript
Vue记住滚动条和实现下拉加载的完美方法
2020/07/31 Javascript
Python数据类型详解(四)字典:dict
2016/05/12 Python
Python查找两个有序列表中位数的方法【基于归并算法】
2018/04/20 Python
Python 实现中值滤波、均值滤波的方法
2019/01/09 Python
对python周期性定时器的示例详解
2019/02/19 Python
使用批处理脚本自动生成并上传NuGet包(操作方法)
2019/11/19 Python
解决python运行启动报错问题
2020/06/01 Python
AmazeUI的下载配置与Helloworld的实现
2020/08/19 HTML / CSS
Reebonz中国官网:新加坡奢侈品购物网站
2017/03/17 全球购物
医师定期考核实施方案
2014/05/07 职场文书
李敖北大演讲稿
2014/05/24 职场文书
音乐教师个人总结
2015/02/06 职场文书
2015年小学美术工作总结
2015/05/25 职场文书