使用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 相关文章推荐
IE中jscript/javascript的条件编译
Sep 07 Javascript
js实现按Ctrl+Enter发送效果
Sep 18 Javascript
jquery分析文本里url或邮件地址为真实链接的方法
Jun 20 Javascript
javascript实现的网站访问量统计代码
Dec 20 Javascript
bootstrap实现动态进度条效果
Mar 08 Javascript
Angular2学习教程之TemplateRef和ViewContainerRef详解
May 25 Javascript
Angularjs 事件指令详细整理
Jul 27 Javascript
JS在if中的强制类型转换方式
Jul 15 Javascript
Angular服务Request异步请求的实例讲解
Aug 13 Javascript
利用Dectorator分模块存储Vuex状态的实现
Feb 05 Javascript
微信小程序实现同时上传多张图片
Feb 03 Javascript
简单了解常用的JavaScript 库
Jul 16 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
PHP控制网页过期时间的代码
2008/09/28 PHP
php数组函数序列之prev() - 移动数组内部指针到上一个元素的位置,并返回该元素值
2011/10/31 PHP
PHP中的命名空间详细介绍
2015/07/02 PHP
PHP编程基本语法快速入门手册
2016/01/07 PHP
PHP实现ASCII码与字符串相互转换的方法
2017/04/29 PHP
jquery中ajax函数执行顺序问题之如何设置同步
2014/02/28 Javascript
JQuery工具函数汇总
2015/06/15 Javascript
JavaScript操作class和style样式代码详解
2016/02/13 Javascript
讲解JavaScript的Backbone.js框架的MVC结构设计理念
2016/02/14 Javascript
Document.body.scrollTop的值总为零的快速解决办法
2016/06/09 Javascript
javascript cookie基础应用之记录用户名的方法
2016/09/20 Javascript
JavaScript中三个等号和两个等号的区别(== 和 ===)浅析
2016/09/22 Javascript
JavaScript版经典游戏之扫雷游戏完整示例【附demo源码下载】
2016/12/12 Javascript
jquery dataTable 后台加载数据并分页实例代码
2017/06/07 jQuery
ECMAscript 变量作用域总结概括
2017/08/18 Javascript
js判断文件类型大小并给出提示的实现方法
2018/01/03 Javascript
解决vue props 拿不到值的问题
2018/09/11 Javascript
node错误处理与日志记录的实现
2018/12/24 Javascript
浅谈vue.use()方法从源码到使用
2019/05/12 Javascript
layui2.0使用table+laypage实现真分页
2019/07/27 Javascript
layui table去掉右侧滑动条的实现方法
2019/09/05 Javascript
layui 弹出删除确认界面的实例
2019/09/06 Javascript
Python中apply函数的用法实例教程
2014/07/31 Python
Python脚本实现网卡流量监控
2015/02/14 Python
python斐波那契数列的计算方法
2018/09/27 Python
Python求两个圆的交点坐标或三个圆的交点坐标方法
2018/11/07 Python
Python字符串对象实现原理详解
2019/07/01 Python
Python3如何使用tabulate打印数据
2020/09/25 Python
马来西亚在线时尚女装商店:KEI MAG
2017/09/28 全球购物
美国伊甸园兄弟种子公司:Eden Brothers
2018/07/01 全球购物
英国时尚优质的女装:Hope Fashion
2018/08/14 全球购物
Myprotein意大利官网:欧洲第一运动营养品牌
2018/11/22 全球购物
泰国健康和美容服务预订网站:GoWabi
2019/06/03 全球购物
python使用XPath解析数据爬取起点小说网数据
2021/04/22 Python
MySQL 全文索引使用指南
2021/05/25 MySQL
Java Redisson多策略注解限流
2022/09/23 Java/Android