【问题标题】:Webpack: export to existing module in windowWebpack:导出到窗口中的现有模块
【发布时间】:2015-08-12 22:03:25
【问题描述】:

我的目标是使用 Webpack 将孤立的组件导出到假定的全局对象中。

index.html

<script>
   var MyApp = window.MyApp || {};
   MyApp.something = MyApp.something || {};
</script>
<script src="my-isolated-module.js"></script>

//
// other modules/components loaded here...
//

<script>
   MyApp.something.myIsolatedModule.run();
</script>

在上面的示例中,我假设有一个全局对象/模块具有属性something,该属性将附加其他模块。所以我想将我的隔离模块附加到全局 MyApp.something 对象而不破坏 MyAppMyApp.something

webpack.config.js

var webpack = require('webpack');
var UglifyJsPlugin = require('webpack/lib/optimize/UglifyJsPlugin');

module.exports = {
    target: 'web',
    context: __dirname + '/src/',
    entry: './main.jsx',
    output: {
        path: __dirname + '/dist/',
        filename: 'app.bundle.js',
        library: 'something',
        libraryTarget: 'var'
    },
    resolve: {
        extensions: ['', '.js', '.jsx']
    },
    module: {
        loaders: [
            {test: /\.jsx$/, loader: '../node_modules/jsx-loader'}
        ]
    },
    externals: {
        react: {
            root: 'React',
            commonjs: 'react',
            commonjs2: 'react',
            amd: 'react'
        }
    },

    plugins: [
        new UglifyJsPlugin()
    ]
};

src/main.jsx

module.exports = {
    myIsolatedModule: require('./MyIsolatedModule')
};

我尝试将 Webpack 的 output.libraryTarget 设置为每个可能的值(请参阅 http://webpack.github.io/docs/configuration.html#output-librarytarget),并尝试使用 output.library 的值,以便它将直接命名空间包含在我的模块中。没有什么能如我所愿...

【问题讨论】:

  • 如果您的包已经存在,您想将其与MyApp.something 合并?您可以将MyApp 添加为external 并自行设置其值。

标签: javascript reactjs commonjs webpack


【解决方案1】:

output.library 可以是如下数组:

output: {
    library: ['MyApp', 'something']
}

这将在窗口window.MyApp.something 上创建一个对象,或者将其添加到window.MyApp(如果它已经存在)。

【讨论】:

  • 谢谢,这是我需要的answer my own question
  • 如果我希望它把所有导出写入MyApp,而不是将所有导出放在something 子对象上?如果我尝试library: ['MyApp'],那么如果它不存在,它就不会创建MyApp。为什么这在 Webpack 中这么难? Rollup 非常简单。
  • 如果每个库都有一个配置怎么办?我猜你可以传递一个对象library: [ { name: 'MyApp' }, { name: 'something' }] ?
猜你喜欢
  • 1970-01-01
  • 2020-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-26
  • 2021-12-22
  • 2019-10-20
  • 2017-09-09
相关资源
最近更新 更多