如何将 npm 包与 webpack 捆绑在一起并作为对象公开?

How to bundle npm packages with webpack and expose as an object?

我不确定这是否可行,但我想做的是获取一些 NPM 包,使用 Webpack 将它们捆绑在一起并将它们公开为一个对象,其中每个包都是一个 属性.

例如,如果我想捆绑 reactreact-dom,它会提供一个对象,如:

{
    'react': /* react code */,
    'react-dom': /* react-dom code */
}

我目前的配置是:

module.exports = {
  entry: [ 'react', 'react-dom' ],
  output: {
    path: __dirname + '/public',
    publicPath: 'http://localhost:8081/public/',
    filename: 'bundle.js',
    libraryTarget: 'umd',
  }
};

这似乎有点工作,因为它确实 return 一个对象,但它 returns 的对象是最后一个 entry 包是什么,所以在这种情况下, 该对象包含 react-dom 的所有方法。

如果我将 entry 数组的顺序更改为 [ 'react-dom', 'react' ],那么只会公开 react 方法。

我的想法是导出对象,这样我就可以使用它们的属性访问这两个包方法,例如 react.Componentreact.PureComponent

我也尝试过使用 expose-loader,但结果与上面相同,除非我配置不正确。

关于如何正确配置 webpack 以实现此目的有什么想法吗?

如果我理解正确你想做什么,你可以设置一个,比方说,bundle-source.js 结构如下:

exports.react = require('react');
exports['react-dom'] = require('react-dom');
exports.anyModule = require('anyModule');

然后将 bundle-source.js 设置为 webpack conf 的入口点:

module.exports = {
  entry: [ '...path-to...bundle-source.js' ],
  output: {
    path: __dirname + '/public',
    publicPath: 'http://localhost:8081/public/',
    filename: 'bundle.js',
    libraryTarget: 'umd',
  }
};