在 Typescript 中如何将 CommonJS 规范的代码合并到一个文件中?
发布于 4 年前 作者 Suwings 4634 次浏览 来自 问答

示例

有如下代码: 1.png

分别导入了以下本地模块

import InstanceCommand from "./commands/command";
import DataStructure from "./structure";
import globalConfig from "./config";
import as path from "path";

需求

需求是将这些分散的模块文件最终统一合并到一个 ts或js 文件中****(不需要包括依赖库),并且能够正常运行,合并后也许可以通过 Typescript 的命名空间来实现命名冲突之类的情况。

简而言之的话,就是希望将后端的 Typescript 打包到一个文件,但是不需要包含依赖库(依赖库的import语句应该继续存在)。

Typescript 的官方文档中有写不支持 CommonJS 规范下的输出到一个文件,尝试过 Webpack 打包,效果不佳,无法正常运行并且似乎会将依赖库的代码一并合并,导致文件异常巨大。也有可能是对此操作失误。

不知道有无相关工具能够实现此需求?还望指教!

9 回复

打包还是得用 webpack 或者 rollupjs,它们都有 external 选项可以将匹配到的内容排除在外

Typescript 的官方文档中有写不支持 CommonJS 规范下的输出到一个文件

就算是 es modules 规范,也无法输出到一个文件中吧?

出于什么目的去做这么一件事情呀

@guojingkang 为了保护源代码,单文件混淆后编译进v8引擎生成单独的exe。

结束一下这个话题,方案如下:

采用 Webpack 打包(webpack.config.js):

const path = require(‘path’); const nodeExternals = require(‘webpack-node-externals’)

module.exports = { mode: “production”, entry: ‘./src/app.js’, target: ‘node’, externalsPresets: { node: true }, // in order to ignore built-in modules like path, fs, etc. externals: [nodeExternals()], // in order to ignore all modules in node_modules folder output: { filename: ‘main.js’, path: path.resolve(__dirname, ‘dist’), }, };

解决。

@Suwings 看配置是,排除了所有的node 库?

回到顶部