搭建 Webpack + TypeScript + Babel 的项目
安装依赖包
安装 webpack 相关的依赖:
npm i -D webpack webpack-cli
安装 ts、babel、source-map 的 loader:
npm i -D ts-loader babel-loader source-map-loader
安装 babel 的核心:
npm i -D @babel/core
安装 babel 的预设器,转换 js 语法的预设器和转换 ts 为 js 的预设器:
npm i -D @babel/preset-env @babel/preset-typescript
安装 babel 的插件,以减少最终 js 代码生成的大小:
npm i -D @babel/plugin-transform-runtime
安装 babel 的工具,必须作为 dependencies:
npm i @babel/runtime
配置 webpack.config.js
接下来在项目根目录创建一个 webpack 配置文件:
webpack.config.dev.js:
点击查看 webpack.config.dev.js 代码
module.exports = {
entry: "./src/main.ts",
mode: "development",
output: {
path: path.resolve(__dirname, "dist/dev"),
filename: "bundle.js"
},
devtool: "source-map",
resolve: {
extensions: [ ".ts", ".tsx", ".js" ]
},
module: {
rules: [
{ test: /\.tsx?$/, loader: "ts-loader", exclude: /(node_modules|bower_components)/ },
{
test: /\.ts$/,
use: {
loader: "babel-loader",
options: {
presets: [
[
"@babel/preset-env",
{
targets: {
"chrome": "58",
"ie": "11"
}
}
], [ "@babel/preset-typescript" ]
],
plugins: [ "@babel/transform-runtime" ]
}
},
exclude: /(node_modules|bower_components)/
},
{ test: /\.js$/, loader: "source-map-loader", exclude: /(node_modules|bower_components)/ }
]
}
};
webpack.config.pro.js:
点击查看 webpack.config.pro.js 代码
const path = require("path");
module.exports = {
entry: "./src/main.ts",
mode: "production",
output: {
path: path.resolve(__dirname, "dist/pro"),
filename: "bundle.js"
},
resolve: {
extensions: [ ".ts", ".tsx", ".js" ]
},
module: {
rules: [
{ test: /\.tsx?$/, loader: "ts-loader", exclude: /(node_modules|bower_components)/ },
{
test: /\.ts$/,
use: [
{
loader: "babel-loader",
options: {
presets: [
[
"@babel/preset-env",
{
targets: {
"chrome": "58",
"ie": "11"
}
}
], [ "@babel/preset-typescript" ]
],
plugins: [ "@babel/transform-runtime" ]
}
}
],
exclude: /(node_modules|bower_components)/
}
]
}
};
配置项的简单说明
配置文件中主要有以下几个大的选项:entry、mode、output、devtool、resolve、module。
entry 是你的项目主要入口文件,webpack 将从这个文件开始进行打包处理。mode 是你这个配置文件适用于哪一种环境,如开发环境和生产环境。在开发环境中我们使用 devtool,即 sourcemaps 方便我们控制台调试代码,而生产环境中就不需要这个东西。
output 是我们的文件最终产生在哪个文件夹内,resolve 我只使用了 extensions 这一个配置,这个配置就是处理我们项目里哪些文件。请看这里resolve.extensions - CSDN。
module 这一个配置项就非常的重要了,里面有 rules 数组选项,我们的 loader 就全部配置在这里。
项目结构图
project
-node_modules
-src
main.ts
tsconfig.json
package.json
package-lock.json
webpack.config.dev.js
webpack.config.pro.js
配置各个 loader
ts-loader
module: {
rules: [ { test: /\.tsx?$/, loader: "ts-loader", exclude: /(node_modules|bower_components)/ } ]
}
bable-loader
module: {
rules: [
{ test: /\.tsx?$/, loader: "ts-loader", exclude: /(node_modules|bower_components)/ },
{
test: /\.ts$/,
use: {
loader: "babel-loader",
options: {
presets: [
[
"@babel/preset-env",
{
targets: {
"chrome": "58",
"ie": "11"
}
}
], [ "@babel/preset-typescript" ]
],
plugins: [ "@babel/transform-runtime" ]
}
},
exclude: /(node_modules|bower_components)/
},
{ test: /\.js$/, loader: "source-map-loader", exclude: /(node_modules|bower_components)/ }
]
}
注意看第二个 loader 的配置,使用了 use 字段。其中一共有三个配置项:loader、options、plugins。loader 毫无疑问是 babel-loader。
options 下有一个预设 presets,是一个数组,第一个数组中有两个值,@babel/preset-env和@babel/preset-typescript。
babel 把高于 ES5 的语法转换成 ES5 以下的语法,因此需要 @babel/preset-env 预设。预设的执行顺序是逆向的执行的,按道理来说先执行 typescript 的预设,然后再把 js 文件的语法转换到低版本的语法。
plugins,即 babel 的插件,请直接查看 Webpack 官方文档的解释:babel-loader。
测试项目
我们随便写两个 ts 函数,试一试这个项目是否成功运行。package.json 添加运行脚本"build": "webpack --config webpack.config.pro.js":
function entry(msg: string, onEntry: (msg: string) => void): void {
onEntry(msg);
}
entry("Hello World!", (e) => {
console.log(e);
});
interface OnEnter {
(msg: string): void;
}
function enter(msg: string, onEnter: OnEnter) {
onEnter(msg);
}
enter("Hello World!", (e) => {
console.log(e);
});
测试结果
console.log("Hello World!"),function(o,l){var e;e="Hello World!",console.log(e)}();
项目模板仓库
如果不想自己配置,可以基于我的模板仓库,根据自己的需求再加以改造:
- GitHub:webpack-ts-babel-template
- Gitee:webpack-ts-babel-template
搭建 Webpack + TypeScript + Babel 的项目的更多相关文章
- 教你搭建基于typescript的vue项目
自尤大去年9月推出vue对typescript的支持后,一直想开箱尝试,对于前端sr来说,vue的顺滑加上ts的面向对象,想着就非常美好~ 终于在两个月前,找到了个机会尝试了一把vue+ts的组合. ...
- 如何在ASP.NET 5上搭建基于TypeScript的Angular2项目
一.前言 就在上月,公司的一个同事建议当前的前端全面改用AngularJs进行开发,而我们采用的就是ASP.NET 5项目,原本我的计划是采用TypeScript直接进行Angular2开发.所以借用 ...
- webpack + typescript + babel打包*.min.js文件的环境配置
将多个*.ts文件打包成一个*.min.js文件的开发配置 1.初始化 npm init 新建以下文件目录: 2.安装依赖: "devDependencies": { " ...
- Vue + WebPack + Typescript初学者VSCode项目 (按需加载、跨域调试、await/async)
万事开头难,一个好的Hello World程序可以节省我们好多的学习时间,帮助我们快速入门.Hello World程序之所以是入门必读必会,就是因为其代码量少,简单易懂.但我觉得,还应该做到功能丰富, ...
- WEBPACK & BABEL 打包项目
本文首发于 BriFuture's Blog. 最近在用 Vue 重写之前的一个项目 Compass,这个项目以前是用 QML + JavaScript 在 Qt 平台上搭建的.这是我本科毕设时做的一 ...
- 手动搭建Vue之前奏:搭建webpack项目
手动搭建vue项目 搭建vue前首先搭建webpack项目 首先你应当安装一下npm以及nodejs 安装完成后,进行如下操作: // 创建项目根目录 mkdir some_project_name ...
- vue 项目中 自定义 webpack 的 配置文件(webpack.config.babel.js)
webpack.config.babel.js,这样命名是想让webpack在编译的时候自动识别es6的语法,现在貌似不需要这样命名了,之前用webpack1.x的时候貌似是需要的 let path ...
- TypeScript在react项目中的实践
前段时间有写过一个TypeScript在node项目中的实践. 在里边有解释了为什么要使用TS,以及在Node中的一个项目结构是怎样的. 但是那仅仅是一个纯接口项目,碰巧赶上近期的另一个项目重构也由我 ...
- 前端MVC Vue2学习总结(七)——ES6与Module模块化、Vue-cli脚手架搭建、开发、发布项目与综合示例
使用vue-cli可以规范项目,提高开发效率,但是使用vue-cli时需要一些ECMAScript6的知识,特别是ES6中的模块管理内容,本章先介绍ES6中的基础与模块化的内容再使用vue-cli开发 ...
随机推荐
- FastDFS 技术整理
1.FastDFS 1.1.了解基础概念 1.1.1.什么是分布式文件系统? 全称:Distributed File System,即简称的DFS 这个东西可以是一个软件,也可以说是服务器,和tomc ...
- MySQL数据库5
内容概要 pyhton操作MySQL SQL注入问题 修改表SQL语句补充 视图.触发器.储存过程 事务 流程控制 函数 索引与慢查询优化 内容详情 pyhton操作MySQL python中支持操作 ...
- 解决跨海高并发崩溃难题?so easy
近年来随着互联网强势的发展浪潮,越来越多的企业选择跨境出海,扩展海外市场.而想要在一个陌生市场最快速地吸引到用户,一定不能缺少的就是丰富多样的各类活动.然而活动在带来大流量的同时,也带来了一些问题,比 ...
- python和numpy中sum()函数的异同
转载:https://blog.csdn.net/amuchena/article/details/89060798和https://www.runoob.com/python/python-func ...
- Java上传文件至SFTP服务器
Windows搭建SFTP服务器 https://www.cnblogs.com/wangjunguang/p/9453611.html 注意点: 1.以管理员权限运行FreeSSHd 2.如果无法启 ...
- RPA应用场景-财务报表统计整合
场景概述 财务报表统计整合 所涉系统名称 邮储银行系统 人工操作(时间/次) 3小时 所涉人工数量 1 操作频率 每月 场景流程 1.登录各个区支行系统 2.机器人按照要求,自动复选多项业务参数,导出 ...
- python+requests+yaml实现接口自动化用例(二)---升级版
一.前言:前面一段时间封装的接口自动化测试框架用了一段时间发现还是有很多弊端的,目前又改良了一下,可以说整体思路全都推翻了,功能比之前强大许多,有兴趣的可以私信我单独交流,希望共同学习进步! 二.项目 ...
- Python快速下载商品数据,并连接数据库,保存数据
开发环境 python 3.8 pycharm 2021.2 专业版 代码实现 发送请求 获取数据 解析数据(筛选数据) 保存数据 连接数据库 开始代码 请求数据 # 伪装 headers = { ' ...
- 使用强大的DBPack处理分布式事务(PHP使用教程)
主流的分布式事务的处理方案 近些年,随着微服务的广泛使用,业务对系统的分布式事务处理能力的要求越来越高. 早期的基于XA协议的二阶段提交方案,将分布式事务的处理放在数据库驱动层,实现了对业务的无侵入, ...
- 6. RDD综合练习:更丰富的操作
集合运算练习 union(), intersection(),subtract(), cartesian() 内连接与外连接 join(), leftOuterJoin(), rightOuterJo ...