如何在 Vue-CLI 3 项目中全局声明 jQuery?

Posted

技术标签:

【中文标题】如何在 Vue-CLI 3 项目中全局声明 jQuery?【英文标题】:How do I globally declare jQuery inside a Vue-CLI 3 project? 【发布时间】:2019-05-20 22:47:58 【问题描述】:

我在 SO 和其他地方看到了很多关于此的问题,但到目前为止我没有运气。

就上下文而言,我在使用“旧”命令创建的 Vue 项目上构建了一个 SPA 网站。我不记得是哪一个,但它看起来像下面这样:

vue init webpack <my project>

我最近意识到 Vue-CLI 3 对我来说更容易维护、保持更新和改进,因此我安装了@vue/cli,创建了一个新项目并开始从我的旧项目中复制/粘贴文件项目到新的。

旧项目有一个 build 目录,其中包含各种 webpack 配置文件,我需要为我想要使用的包全局设置 jQuery,因此我将以下内容添加到 Webpack 的“基础”配置中。

new webpack.ProvidePlugin(
  $: 'jquery',
  jQuery: 'jquery'
),

但是,对于新项目,我现在拥有的所有配置文件是项目根目录下的babel.config.jsvue.config.js,没有buildconfig 目录。

我尝试在我的main.js 文件中使用以下行全局设置 jQuery:

import jQuery from 'jquery'

window.$ = window.jQuery = jQuery
global.$ = global.jQuery = jQuery

但每次我重新加载页面时,都会收到以下消息:

jQuery 没有定义

所以,到目前为止,我使用的是 jQuery 的 CDN 版本,但我对这个解决方案并不放心。

我应该如何进行 Vue-CLI 3 项目?

提前谢谢你

【问题讨论】:

不要!像 Vue 这样的现代模板引擎的重点是不要使用像 jQuery 这样的遗留库。只是不要! 问题是,我无法在 Vue 上下文中找到或使 vanilla js 包工作.. 你应该在每个你需要的 .js/.vue 的开头使用import jquery from jquery,然后是 jquery("#id").whatever)` 您也许可以将其添加到Vue() 并通过.vue 文件中的this.$jquery 访问它,您还没有尝试过。 【参考方案1】:

如果您使用的是 Jquery 插件,您应该在 main.js 中执行此操作:

/*
* If using Jquery plugins they will expect to be available in the global namespace, 
* which isn’t the case when you import/require it. So manually assign jquery to 
* window. Use require instead of import because the imports are hoisted to the
* top of a file by the compiler, which would break VueJS code.
*/
const $ = require('jquery')
window.jQuery = window.$ = $;

【讨论】:

【参考方案2】:

您可以使用 Vue 插件。这允许您向每个组件添加新属性。

main.js

import Vue from 'vue';
import jQuery from 'jquery';

Vue.use(
  install (V) 
    V.$jQuery = V.prototype.$jQuery = jQuery
  
)

那么你就可以在组件的任何地方使用jQuery了。

MyComponent.vue

import Vue from 'vue'

export default 
  mounted () 
    this.$jQuery('h1').text('Hello World')
    Vue.$jQuery('h1').text('Hello World')
  

甚至是另一个 js 文件。

util.js

import Vue from 'vue'

Vue.$jQuery('h1').text('Hello World')

【讨论】:

【参考方案3】:

您可以继续 public/index.html 并将脚本标记添加到正文中,并带有指向您的 jquery 文件或 cdn 的路由。 如果你把它放在公共的 jquery 文件夹中,它看起来像:

<body>
    <div id="app"></div>
    <script type="text/javascript" src="/jquery/jquery-3.4.1.min.js"></script>
</body>

我不确定这是否正是您想要的,但它会使其在您的项目中全球可用。

【讨论】:

以上是关于如何在 Vue-CLI 3 项目中全局声明 jQuery?的主要内容,如果未能解决你的问题,请参考以下文章

vue-cli3使用sass全局变量(less同理)

vue-cli3使用sass全局变量(less同理)

使用vue-cli开发过程中如何把jQuery设置为全局

vue-cli3.0 搭建项目

创建vue-cli3项目和配置

vue-cli的项目中关于axios的全局配置