我using this article只导入我需要的jquery部分。
但是,在使用此代码时遇到了一个问题:
let $ = require('jquery/src/core');
require('jquery/src/core/init');
require('jquery/src/css');
console.log($);
我收到此错误:
ERROR in ./~/jquery/src/selector-sizzle.js
Module not found: Error: Cannot resolve 'file' or 'directory' ../external/sizzle/dist/sizzle in /home/vamsi/Do/highland-fun/bacon-form/node_modules/jquery/src
@ ./~/jquery/src/selector-sizzle.js 1:0-14:3
这是我的webpack.config.js
文件:
module.exports = {
entry:'./app',
output:{
filename:'./bundle'
},
modules:{
loaders:[
{
test:/jquery[\\\/]src[\\\/]selector\.js$/,
loaders:['amd-define-factory-patcher-loader']
}
]
}
}
我尝试使用resolve.alias
来解决此问题:
resolve:{
alias:{
'../external/sizzle/dist/sizzle':'./node_modules/sizzle/dist/sizzle.js'
}
}
但它仍然会抛出与以前相同的错误。
答案 0 :(得分:12)
我using this article只导入我需要的jquery部分。
本文是在jquery 2.2.0发布之前编写的。
在 jquery 2.1.x :
中// jquery/src/selector-sizzle.js
define([
"./core",
"sizzle"
], function( jQuery, Sizzle ) {
//...
})
因此,sizzle
已解析为<base-dir>/node_modules/sizzle
但是在 jquery 2.2.x :
// jquery/src/selector-sizzle.js
define([
"./core",
"../external/sizzle/dist/sizzle" // <- missing
], function( jQuery, Sizzle ) {
//...
})
如果您查看<base-dir>/node_modules/jquery
,则会看到<base-dir>/node_modules/jquery/external
丢失。该目录存在于jquery repo中,但在jquery npm包中被忽略。
不幸的是,我没有设法用webpack的resolve.alias
以任何方式解决这个问题。
或者,其中一个解决方案将适合您:
"jquery": "~2.1.4"
"../external/sizzle/dist/sizzle"
替换为"sizzle"
: npm i string-replace-loader --save-dev
// webpack.config.js
module.exports = {
//...
module: {
preLoaders: [{
test: /jquery[\\\/]src[\\\/]selector-sizzle\.js$/,
loader: 'string-replace',
query: {
search: '../external/sizzle/dist/sizzle',
replace: 'sizzle'
}
}]
}
//...
};
注意:在这两种解决方案中,您都必须npm i sizzle --save