公司项目代码是用 TypeScript 写的, 中间遇到有些代码不要放到 Node 里面去跑.

具体场景一些路由配置, 比较大的一块 JSON 数据定义在 TypeScript 里.
我另外有增加脚本, 基于这些 JSON 数据用来生成切换路由的函数.
这就需要运行 TypeScript 了, 而且可能包含一些额外的业务代码.
首先 Node 运行 TypeScript 有提供 ts-node 用来处理.
ts-node 会先编译 TypeScript 代码到 JavaScript, 再调用 Node 运行.
不过这个办法有一些问题, 一个是 TypeScript 定义的路径配置不成功,
另一个问题更麻烦点, 就是引用到的其他的浏览器端代码因为触发运行而引起报错.
Webpack 打包 TypeScript Node 代码
我先想到了一个相对省事的方案, 就是用 Webpack 对 TypeScript 进行打包.
打包完成以后输出 JavaScript 代码. 而浏览器代码打包进去, 但不一定运行.
由于 TypeScript 配置在 Webpack 当中引用有比较成熟的方案, 整个配置也写好:
module.exports = {
mode: "development",
target: "node",
entry: ["./example/gen-router.ts"],
output: {
filename: "gen-router.js",
path: path.join(__dirname, "../", distFolder),
},
devtool: "none",
module: {
rules: [
// 正常的 TypeScript 编译方式, 我这份是拷贝的.
{
test: /\.tsx?$/,
exclude: [/node_modules/, path.join(__dirname, "scripts")],
use: [
{ loader: "cache-loader" },
{
loader: "thread-loader",
options: {
workers: require("os").cpus().length - 1,
},
},
{
loader: "ts-loader",
options: {
happyPackMode: true,
transpileOnly: true,
},
},
],
},
],
},
// Node 模块, 写在 external 里面表明不需要进行打包. 注意 commonjs 前缀
externals: {
prettier: "commonjs prettier",
"@jimengio/router-code-generator": "commonjs @jimengio/router-code-generator",
fs: "commonjs fs",
path: "commonjs path",
},
resolve: {
extensions: [".tsx", ".ts", ".js"],
modules: [path.join(__dirname, "example"), "node_modules"],
// 引用 Plugin 用于读取 tsconfig.json 文件的配置
plugins: [new TsconfigPathsPlugin({ configFile: path.join(__dirname, "../tsconfig.json") })],
},
};
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
网站题目:浅谈TypeScript用Webpack/ts-node运行的配置记录-创新互联
转载来源:http://www.scyingshan.cn/article/hcidd.html


咨询
建站咨询
