当前,我的程序包以一种导入方式进行开发,您需要确定目标。所以:
import * as myLib from 'mylib/node' // if i want to use the node implementation
import * as myLib from 'mylib/web' // if i want to use the web implementation
功能相同,实现不同,因为它们使用不同的API。我想转到一个将对节点和Web有效的导入。为此,我更改了代码以检测其是否在节点或Web中运行。这使我可以像这样导入它:
import * as myLib from 'mylib'
哪个工作。但是,当我使用mylib
与webpack捆绑某些代码(作为Web目标)时,它会变得笨拙,因为它尝试捆绑nodejs实现(在捆绑worker_threads
之类的捆绑包时失败)
webpack.config.ts
:
import * as path from 'path'
import { Configuration } from 'webpack'
const config: Configuration = {
entry: './dist/index.js',
target: 'web',
output: {
filename: 'mylib.web.js',
path: path.resolve(__dirname, 'dist'),
library: 'mylib',
libraryTarget: 'umd'
},
mode: 'production'
}
export default config
如何捆绑这样的程序包或以支持节点和Web的方式编写程序包并正确捆绑。
要以这种方式指定我合并的Web和节点实现: 之前:
// mylib/node
export const func = () => {
// using worker_threads here
}
// mylib/web
export const func = () => {
// using web worker here
}
之后:
// mylib
export const func = () => {
if(/* am i in node test */) {
// execute the worker_threads implementation
} else {
// execute the web workers implementation
}
}