在一个打包了webpack的项目中考虑一个捆绑包,所有捆绑到bundle1.js
的地方:
// entry.ts
import * as _ from 'lodash';
// other imported libraries
import { something } from './util';
// other imported bundle project local code
export function doBundleSomething(args: any): any {
// actually does something necessary
console.log('doing things');
return 'whatever result';
}
Shell程序是另一个项目,其中也包含webpack和main.js
之外的所有bundle1.js
依赖项,因为它是在运行时由环境决定的:
// main.ts
import * as _ from 'lodash';
// other imported libraries
import { something } from './shell-util';
// other imported shell program local code
// do something useful
const ifBundleNeeded = true; // decided by useful something
if (ifBundleNeeded) {
const bundlePath = process.env.BUNDLE_PATH; // could be CLI argument
// somehow load bundle
const doBundleSomething = ???
const result = doBundleSomething({arg: 'hello-bundle'});
console.log('bundle said', result);
}
应按以下方式执行:
BUNDLE_PATH=/opt/path/some-bundle.js node /srv/program/path/main.js
注意:
tsconfig
目标是es6
typescript
> = 3.x和webpack awesome-typescript-loader
(即最新和最好的)如何使用最少的最低配置实现此行为?
如果在外壳程序Webpacking中BUNDLE_PATH
是已知的(即,硬编码路径,以便webpack可以看到它),则它与require
,import()
(包括{{ 1}}。
否则,使用不同的替代方案会在不同阶段失败,并且在使用时会出现从eval("require")()
到Cannot find module
的各种错误。