webpack 1:resolve.alias没有将一个npm模块别名化为另一个

时间:2016-03-04 00:34:10

标签: javascript node.js webpack

我有一个webpack配置,用于为同构React应用程序创建服务器包。在该配置内部,我尝试使用resolve.alias将一个模块(parse)另外设置为另一个模块(parse/node)。关于网络包文档中resolve.alias的{​​{3}}使得它看起来应该是可行的。这就是我的别名对象:

alias: {
    parse: 'parse/node',
    pubnub: 'static/deps/pubnub/pubnub-3.13.0.min.js'
}

我已经在使用模块pubnub的别名,并且该别名适用于预期。不幸的是,无论我对解析密钥做了什么,似乎都没有改变我的webpack-built bundle.js中产生的需求:

/***/ function(module, exports) {
    module.exports = require("parse");
/***/ },

我正在努力解决/node_modules/parse/node.js。使用绝对/相对路径似乎不起作用,也没有在末尾添加.js扩展名。在这一点上,我无法弄清楚这是一个webpack错误还是我忽略的东西。任何帮助将不胜感激!这是我的完整webpack配置的要点链接:This handy chart

node@5.7.0
npm@3.7.5
webpack@1.12.14

1 个答案:

答案 0 :(得分:2)

问题在于webpack配置中的以下行:

...,
externals: [nodeExternals({
    whitelist: ['webpack/hot/poll?1000']
})],
...,

webpack-node-externals是一个webpack插件,用于自动将node_modules中找到的模块列入黑名单。在构建后端时,通常不需要将npm模块与最终捆绑包捆绑在一起,因为npm模块已安装在系统上。此黑名单还阻止webpack对任何npm模块进行任何别名。像这样更改whitelist数组解决了我的问题:

...,
externals: [nodeExternals({
    whitelist: ['webpack/hot/poll?1000', 'parse']
})],
...,

这个故事的寓意:不要在没有完全理解它的作用的情况下从锅炉板上复制代码。如果我只是阅读README.md我正在使用的webpack插件,我本可以节省几天的头痛。