使用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 相关文章推荐
个人总结的一些关于String、Function、Array的属性和用法
Jan 10 Javascript
JavaScript中函数声明优先于变量声明的实例分析
Mar 01 Javascript
jQuery插件formValidator自定义函数扩展功能实例详解
Nov 25 Javascript
js获取页面引用的css样式表中的属性值方法(推荐)
Aug 19 Javascript
Javascript生成带参数的二维码示例
Oct 10 Javascript
Angular 4.0学习教程之架构详解
Sep 12 Javascript
bootstrap轮播模板使用方法详解
Nov 17 Javascript
微信小程序模板和模块化用法实例分析
Nov 28 Javascript
详解vue.js之props传递参数
Dec 12 Javascript
原生javascript的ajax请求及后台PHP响应操作示例
Feb 24 Javascript
Javascript ParentNode和ChildNode接口原理解析
Mar 16 Javascript
jQuery实现移动端笔触canvas电子签名
May 21 jQuery
小程序简单两栏瀑布流效果的实现
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
mysql5详细安装教程
2007/01/15 PHP
PHP以mysqli方式连接类完整代码实例
2014/07/15 PHP
PHP中echo,print_r与var_dump区别分析
2014/09/29 PHP
JavaScript Array扩展实现代码
2009/10/14 Javascript
jQuery中使用了document和window哪些属性和方法小结
2011/09/13 Javascript
javascript中如何处理引号编码"
2013/08/15 Javascript
javascript自然分类法算法实现代码
2013/10/11 Javascript
jquery 取子节点及当前节点属性值
2014/07/25 Javascript
详细解读JavaScript编程中的Promise使用
2015/07/27 Javascript
jquery实现简单Tab切换菜单效果
2020/07/17 Javascript
Javascript 6里的4个新语法
2016/08/25 Javascript
Angular2从搭建环境到开发步骤详解
2016/10/17 Javascript
JS封装通过className获取元素的函数示例
2016/12/20 Javascript
JS中如何实现点击a标签返回页面顶部的问题
2017/01/19 Javascript
javascript实现电脑和手机版样式切换
2017/11/10 Javascript
layui实现文件或图片上传记录
2018/08/28 Javascript
Vue CLI3搭建的项目中路径相关问题的解决
2018/09/17 Javascript
浅析Angular 实现一个repeat指令的方法
2019/07/21 Javascript
vue element upload组件 file-list的动态绑定实现
2019/10/11 Javascript
javascript 设计模式之享元模式原理与应用详解
2020/04/08 Javascript
[52:22]EG vs VG Supermajor小组赛B组 BO3 第一场 6.2
2018/06/03 DOTA
python使用mysqldb连接数据库操作方法示例详解
2013/12/03 Python
python difflib模块示例讲解
2017/09/13 Python
Python综合应用名片管理系统案例详解
2020/01/03 Python
基于Django集成CAS实现流程详解
2020/11/28 Python
美国著名的家居用品购物网站:Bed Bath & Beyond
2018/01/05 全球购物
LODI女鞋在线商店:阿利坎特的鞋类品牌
2019/02/15 全球购物
美国二手复古奢侈品包包购物网站:LXRandCo
2019/06/18 全球购物
英国鞋网:Rubber Sole
2020/03/03 全球购物
如果让你测试一台高速激光打印机,你都会进行哪些测试
2012/12/04 面试题
打架检讨书500字
2014/01/29 职场文书
2014年公司庆元旦活动方案
2014/03/05 职场文书
春游踏青活动方案
2014/08/14 职场文书
教师个人总结范文
2015/02/11 职场文书
入党积极分子半年考察意见
2015/06/02 职场文书
纪律委员竞选稿
2015/11/19 职场文书