【发布时间】:2016-11-05 19:02:35
【问题描述】:
我有一个大型项目,我一直在重构它以使用 webpack 和 ES6 模块。我的许多依赖项都使用 commonJS 或 AMD 模块,所以我需要它们以旧方式。
例如,
const Pikaday = require("pikaday");
不幸的是,当我现在跑步时
webpack --progress
看起来 webpack 正在尝试解析该路径中的每个文件。我收到几个警告,例如:
Module parse failed: /path/to/node_modules/pikaday/index.html
最终,我收到以下错误:
ERROR in ./~/pikaday/tests/methods.js
Module not found: Error: Cannot resolve module 'expect.js' in
/Users/myuser/web/myproject/node_modules/pikaday/tests
我从这个依赖项中的测试目录中得到一个错误,我显然不关心解析我的包。 为什么 webpack 会尝试解析该路径中的每个文件,我该如何纠正这种行为?
为清楚起见,我将在此处发布我的 webpack.config.js 文件的重要部分。
var webpack = require("webpack");
var path = require("path");
module.exports = {
entry : {
main : './public/src/Main/main.js',
},
output : {
path : './public/build',
filename : '[name].bundle.js'
},
module : {
loaders : [
{
test : /\.json$/,
loader : 'json'
},
{
test : /\.js$/,
loader : "babel?presets[]=es2015"
},
{
test : /\.css$/,
loaders : [
'style',
'css'
]
},
{
test: /\.scss$/,
loaders: ["style", "css", "sass"]
},
{
test : /\.(svg|jpg|png|jpeg)$/,
loader : 'url'
},
{
test : /vendor\/.+\.(jsx|js)$/,
loader : 'imports?jQuery=jquery,$=jquery,this=>window'
}
]
},
"plugins" : [
new webpack.ProvidePlugin({
$ : "jquery",
jQuery : "jquery",
"window.jQuery" : "jquery"
}),
new webpack.ProvidePlugin({
$clamp : "clamp-js"
}),
new webpack.ProvidePlugin({
})
]
};
【问题讨论】:
-
如果我不得不猜测一下,那就是这一行:github.com/dbushell/Pikaday/blob/master/pikaday.js#L23 Webpack 只是看到了
require(id),所以它无法知道 哪个 文件引用了,并且因此将尝试捆绑 all 以防万一。也许尝试类似stackoverflow.com/questions/29302742/… 来禁用AMD 处理,因为github.com/dbushell/Pikaday/blob/master/pikaday.js#L15 直接在require中有正确的值? -
@loganfsmyth 你真是个天才:)。我听从了您的建议,并立即能够成功运行我的构建。如果您想将其发布为答案,我会接受...还不如获得一些额外的 SO 积分!
标签: javascript build webpack ecmascript-6 babeljs