试图用webpack来获取jquery的部分内容

vam*_*olu 4 javascript jquery webpack

我正在使用这篇文章只导入我需要的jquery部分.

但是,在使用此代码时,我遇到了一个问题:

let $ = require('jquery/src/core');
require('jquery/src/core/init');
require('jquery/src/css');
console.log($);
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

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
Run Code Online (Sandbox Code Playgroud)

这是我的webpack.config.js档案:

module.exports = {
    entry:'./app',
    output:{
      filename:'./bundle'
    },
    modules:{
      loaders:[
        {
           test:/jquery[\\\/]src[\\\/]selector\.js$/,
           loaders:['amd-define-factory-patcher-loader']
        }
      ]
    }
}
Run Code Online (Sandbox Code Playgroud)

我试图用a resolve.alias来解决这个问题:

resolve:{                                                                
  alias:{                                                                
   '../external/sizzle/dist/sizzle':'./node_modules/sizzle/dist/sizzle.js'
  }                                                                      
}
Run Code Online (Sandbox Code Playgroud)

但它仍然抛出与以前相同的错误.

Ram*_*oya 12

问题

我正在使用这篇文章只导入我需要的jquery部分.

本文是在jquery 2.2.0发布之前编写的.

jquery 2.1.x中:

// jquery/src/selector-sizzle.js

define([
    "./core",
    "sizzle"
], function( jQuery, Sizzle ) {
  //...
})
Run Code Online (Sandbox Code Playgroud)

所以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 ) {
  //...
})
Run Code Online (Sandbox Code Playgroud)

如果你看,<base-dir>/node_modules/jquery你会发现它<base-dir>/node_modules/jquery/external丢失了.该目录存在于jquery repo中,但在jquery npm包中被忽略.

解决方案

不幸的是,我无法以resolve.alias任何方式解决这个问题.或者, 这些解决方案之一将适合您:

  • 使用jquery 2.1.4 - > "jquery": "~2.1.4"
  • 继续使用jquery 2.2.x并使用string-replace-loader作为预加载器替换"../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'
            }
        }]
    }
    //...
};
Run Code Online (Sandbox Code Playgroud)

注意:在两种解决方案中,您都必须这样做npm i sizzle --save