使用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中使用inline函数的问题
Mar 08 Javascript
使用jQuery.fn自定义jQuery翻页插件
Jan 20 Javascript
js数组的操作详解
Mar 27 Javascript
javascript制作坦克大战全纪录(2)
Nov 27 Javascript
纯JS实现本地图片预览的方法
Jul 31 Javascript
详解微信小程序开发之城市选择器 城市切换
Jan 17 Javascript
JavaScript选取(picking)和反选(rejecting)对象的属性方法
Aug 16 Javascript
Vue.js分页组件实现:diVuePagination的使用详解
Jan 10 Javascript
vue实现a标签点击高亮方法
Mar 17 Javascript
深入理解react 组件类型及使用场景
Mar 07 Javascript
解决vue里a标签值解析变量,跳转页面,前面加默认域名端口的问题
Jul 22 Javascript
Express 配置HTML页面访问的实现
Nov 01 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 常用类汇总 推荐收藏
2010/05/13 PHP
CentOS6.5 编译安装lnmp环境
2014/12/21 PHP
php 升级到 5.3+ 后出现的一些错误,如 ereg(); ereg_replace(); 函数报错
2015/12/07 PHP
PHP实现的观察者模式实例
2017/06/21 PHP
laravel手动创建数组分页的实现代码
2018/06/07 PHP
jquery prop的使用介绍及与attr的区别
2013/12/19 Javascript
jquery操作HTML5 的data-*的用法实例分享
2014/08/17 Javascript
JS实现同时搜索百度和必应的方法
2015/01/27 Javascript
jquery实现实时改变网页字体大小、字体背景色和颜色的方法
2015/08/05 Javascript
每天一篇javascript学习小结(属性定义方法)
2015/11/19 Javascript
JavaScript实现点击文本自动定位到下拉框选中操作
2016/06/15 Javascript
vue实现简单表格组件实例详解
2017/04/16 Javascript
解读ES6中class关键字
2017/11/20 Javascript
Vue手把手教你撸一个 beforeEnter 钩子函数
2018/04/24 Javascript
基于JavaScript实现单例模式
2019/10/30 Javascript
使用 UniApp 实现小程序的微信登录功能
2020/06/09 Javascript
Python中使用Queue和Condition进行线程同步的方法
2016/01/19 Python
python Celery定时任务的示例
2018/03/13 Python
python中int与str互转方法
2018/07/02 Python
在pycharm中使用git版本管理以及同步github的方法
2019/01/16 Python
Python空间数据处理之GDAL读写遥感图像
2019/08/01 Python
python 类的继承 实例方法.静态方法.类方法的代码解析
2019/08/23 Python
实现ECharts双Y轴左右刻度线一致的例子
2020/05/16 Python
python opencv肤色检测的实现示例
2020/12/21 Python
Python3利用scapy局域网实现自动多线程arp扫描功能
2021/01/21 Python
清除canvas画布内容(点擦除+线擦除)
2020/08/12 HTML / CSS
巴西电子产品购物网站:Saldão da Informática
2018/01/09 全球购物
Sephora丝芙兰印尼官方网站:购买化妆品和护肤品
2018/07/02 全球购物
Currentbody德国站:健康与美容技术专家
2020/04/05 全球购物
情人节寄语大全
2014/04/11 职场文书
企业安全生产责任书
2014/04/14 职场文书
人事经理岗位职责范本
2014/08/04 职场文书
小学校园广播稿集锦
2014/10/04 职场文书
习近平在党的群众路线教育实践活动总结大会上的讲话全文
2014/10/25 职场文书
Nginx配置https的实现
2021/11/27 Servers
Java练习之潜艇小游戏的实现
2022/03/16 Java/Android