需要Webpack bundle - 返回空对象?

时间:2016-07-10 05:48:13

标签: webpack commonjs

更新 - 相关:How to prepend module.exports = to webpack bundle?

我让webpack编译一个简单的module.exports = "asdfasdf"foo.js

在节点server.js中,我有var foo = require("./foo.js")

当我console.log(foo)时,我得到一个空对象{}

我做错了什么?

我的webpack配置:

module.exports = {
    entry: "./test.js",
    output: {
        filename: "./foo.js"
    },
    target: "node",
    module: {
        loaders: [
            {
                exclude: /(node_modules|bower_components)/,
                loader: "babel?presets[]=react,presets[]=es2015"
            }
        ]
    },
    devtool: "#source-map"
};

3 个答案:

答案 0 :(得分:12)

我认为你错过了libraryTarget - 设置。将libraryTarget: "commonjs2"添加到配置应该可以解决问题。 See the webpack-docs about it

答案 1 :(得分:6)

在我的情况下,在Babel 6中使用 babel-loader 时遇到同样的问题。 即使我设置

"libraryTarget": "commonjs2"

我有结果:

const foo = require('some-module');
console.log(foo) // is {}

const bar = require('some-module').default;
console.log(bar) // is default export of 'some-module'

如果你想:

const foo = require('some-module');
console.log(foo) // is default export of 'some-module'

您可以使用: babel-plugin-add-module-exports

<强>更新

webpack的作者不建议使用 babel-plugin

Webpack 3有output.libraryExport选项(现在没有详细的文档

我试过这个

output.libraryExport: 'default'

它解决了问题。

答案 2 :(得分:0)

我遇到了同样的问题,因为开玩笑我需要@babel插件。我用babel-6编写了整个项目。现在,我在@mbraint的建议下再次尝试了此操作。而且有效!因此,对于webpack输出属性,您需要如下所示:

    output: {
        path: path.join(__dirname, 'dist'),
        filename: '<output-file-name>.js',
        libraryTarget: 'commonjs2',
        libraryExport: 'default',
        library: '<ProjectName>'
    },

使用我显示的命名用例。快乐编码✌