如何捆绑依赖于环境的软件包?

时间:2019-04-25 15:06:50

标签: node.js typescript webpack

问题

当前,我的程序包以一种导入方式进行开发,您需要确定目标。所以:

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
  }
}

0 个答案:

没有答案