【问题标题】:import jquery into vuejs2 project via expose-loader通过expose-loader将jquery导入vuejs2项目
【发布时间】:2017-11-30 00:12:21
【问题描述】:

我用最新的 vue-cli 创建了一个 vuejs2 项目,并尝试使用expose-loader 将 jQuery 导入到项目中,我想我按照official readme 中的说明进行操作,但没有成功。

我做了什么:

  • 通过npm安装jquery和expose-loader
  • build/webpack.base.conf.js中插入以下行

但是当我在 Chrome 开发工具的控制台中输入 console.log(window.jQuery) 时,我仍然没有定义。

// ...
module: {
  rules: [
    // added for supporting jquery
    {
      test: require.resolve('jquery'),
      use: [{
        loader: 'expose-loader',
        options: 'jQuery'
      },{
        loader: 'expose-loader',
        options: '$'
      }]
    },
// ...

我错过了什么?

【问题讨论】:

    标签: jquery vue.js vuejs2 webpack-2


    【解决方案1】:

    您可以尝试不使用expose-loader,使用ProviderPlugin

    1. npm install jquery --save
    2. 现在在你的 build/webpack.base.conf.js

      module.exports = { 
          plugins: [ 
              new webpack.ProvidePlugin({ 
                  $: 'jquery', 
                  jQuery: 'jquery',
                  'window.jQuery': 'jquery'
              }) 
          ]
          //..
      } 
      

    【讨论】:

    【解决方案2】:

    为了在我的应用程序中执行此操作,我直接在 import 语句中的入口点文件中更明确地说明了这一点:

    import 'expose-loader?$!expose-loader?jQuery!jquery';

    这会将 jquery 通过expose-loader 插件暴露给$jQuery 变量。

    【讨论】:

    • 是的,require("expose-loader?$!jquery"); 也可以做到这一点,但我想知道为什么在 webpack 的配置文件中设置它不起作用。
    • 你有 jquery setup 的别名吗?我发现您尝试使用的配置不适用于缩小版 jquery 的别名。如果我删除了别名,那么一切正常。当我使用缩小版本的别名时,我上面提到的内联版本工作得很好。为什么会发生这种情况,不确定。
    • 您好,感谢您的评论。很抱歉,但我不确定您指的是什么“别名”。如果你指的是resolve属性中的alias,这里是我的resolve属性,它是由vue-cli定义的,我自己没有修改。 resolve: {extensions: ['.js', '.vue', '.json'], alias: {'vue$': 'vue/dist/vue.esm.js', '@': resolve('src') } }
    • 顺便说一句,我使用 vue-cli 的 webpack 模板来生成我的项目。
    • 是的,resolve.alias 部分就是我所指的。我不确定'@'条目是做什么用的......也许可以尝试将其删除作为测试,看看 jquery 是否有效。抱歉,我没有更官方的消息。
    猜你喜欢
    • 2017-09-30
    • 2018-02-02
    • 2020-10-30
    • 2011-12-15
    • 2017-01-23
    • 2014-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多