1 回答
![?](http://img1.sycdn.imooc.com/5333a1920001d36402200220-100-100.jpg)
TA贡献1859条经验 获得超6个赞
对于任何对此感到头疼的 TypeScript 初学者来说,答案就是 JavaScript 打包器。
由于我使用的是 ES6,因此我选择了 RollupJs 捆绑器结合以下插件(按此顺序使用它们):
rollup-plugin-resolve
- 需要解析 node_modulesrollup-plugin-commonjs
- 需要将 node_modules 中的 CommonJS 模块转译为 ES6rollup-plugin-typescript2
- 可选,您可以在过程中使用它,也可以在运行汇总之前手动使用 tsc - 只需确保使用版本 2(不再维护第一个版本)rollup-plugin-terser
- 压缩器和混淆器
您可以使用 npm 安装所有这些: npm install rollup rollup-plugin-resolve rollup-plugin-commonjs rollup-plugin-typescript2 rollup-plugin-terser
添加rollup.config.js
到您的项目的根目录,我的看起来像这样:
import typescript from "rollup-plugin-typescript2"
import commonjs from "rollup-plugin-commonjs";
import resolve from "rollup-plugin-node-resolve";
import { terser } from "rollup-plugin-terser";
import pkg from "./package.json"
export default {
input: "./wwwroot/js/svgts.js",
output: [
{
file: pkg.module,
format: "esm",
},
],
external: [
...Object.keys(pkg.dependencies || {}),
...Object.keys(pkg.peerDependencies || {}),
], plugins: [
resolve({
mainFields: ["module"], // Default: ["module", "main"]
}),
commonjs({
include: "node_modules/**"
}),
typescript({
typescript: require("typescript"),
tsconfig: "./tsconfig.json"
}),
(process.env.NODE_ENV === "production" && terser({
mangle: { reserved: ['svg'] }
}))
],
}
Rollup 支持我在这里使用的环境变量: process.env.NODE_ENV === "production"
这允许您创建 npm 脚本package.json以轻松包含或不包含缩小,例如:
"scripts": {
"tsc": "tsc",
"tsc:w": "tsc -w",
"lite": "lite-server",
"rollup": "rollup -c",
"rollupw": "rollup -cw",
"start": "concurrently \"npm run rollupw\" \"npm run lite\"",
"startprod": "NODE_ENV=production concurrently \"npm run rollupw\" \"npm run lite\"",
"production": "NODE_ENV=production npm run rollup"
},
然后你可以在终端中运行npm run production例如构建缩小包。
您可以在每个项目的 GitHub 上找到更多详细信息。
添加回答
举报