Webpack:无法加载具有全局jQuery的光滑插件

时间:2017-06-19 10:21:27

标签: javascript jquery webpack slick.js

我尝试使用slick plugin版本2.6.1加载webpack,到目前为止没有成功。

我需要将jquery加载为全局变量和版本2.2.4(因为我还有其他旧的插件需要管理),所以我在 webpack中设置了 ProvidePlugin .config.js 文件:

const webpack = require('webpack');
const nodeEnv = process.env.NODE_ENV || 'production';

module.exports = {
  devtool: 'source-map',
  entry: { filename: './src/js/main.js' },
  output: { filename: './dist/js/bundle.js' },
  module: {
    loaders: [{
        test: /\.js$/,
        exclude: /node_modules/,
        loader: 'babel-loader'
    }]
  },
  plugins: [
    new webpack.ProvidePlugin({
      jQuery: 'jquery',
      $: 'jquery',
      jquery: 'jquery'
    }),

    new webpack.DefinePlugin({
      'process.env': { NODE_ENV: JSON.stringify(nodeEnv) }
    })
  ]
};

我的 main.js 文件如下:

import 'slick-carousel';
console.log('jquery version: ', $.fn.jquery);
console.log($.fn.slick);

bundle.js 文件由webpack生成,其中包含以下日志:

Version: webpack 2.6.1
Time: 1490ms
                  Asset    Size  Chunks                    Chunk Names
    ./dist/js/bundle.js  616 kB       0  [emitted]  [big]  filename
./dist/js/bundle.js.map  794 kB       0  [emitted]         filename
   [0] ./~/jquery/dist/jquery.js 258 kB {0} [built]
   [1] ./~/slick-carousel/slick/slick.js 84.3 kB {0} [built]
   [2] ./src/js/main.js 1.52 kB {0} [built]
   [3] ./~/slick-carousel/~/jquery/dist/jquery.js 268 kB {0} [built]

jQuery被加载两次:第一个在全局环境中,版本2.2.4,第二个是版本3.2.1(版本对我来说太近了,我不想要)作为依赖包含在slick中,我想。

将其加载到html页面,我在浏览器开发工具中输入以下日志:

jquery version: 2.2.4
undefined

因此,jquery已正确加载但光滑不是。

我错过了什么?

谢谢

2 个答案:

答案 0 :(得分:2)

我找到了适合我的解决方案:

  1. 添加到js文件中:

    import $ from 'jquery';
    import 'slick-carousel';
    
  2. 添加到scss文件中:

    $slick-font-path: "/node_modules/slick-carousel/slick/fonts/" !default;
    $slick-font-family: "slick" !default;
    $slick-loader-path: "/node_modules/slick-carousel/slick-carousel/slick/" !default;
    $slick-arrow-color: black !default;
    @import "~slick-carousel/slick/slick.scss"; 
    @import "~slick-carousel/slick/slick-theme.scss";
    

答案 1 :(得分:1)

问题是我的 package.json :我在依赖项属性和 jquery 中有 slick-carousel devDependencies 中。

在依赖项中移动 jquery 解决了我的问题。