在 Vite项目中,使用插件 @rollup/plugin-inject 注入全局 jQuery

写在前面

在一次项目脚手架升级的过程中,将之前基于 webpack 搭建的项目移植到 Vite 构建。

一些组件库是依赖 jQuery 的,如:Bootstrap;引入这些组件的时候,需要项目中已经存在 jQuery 环境。

例如:当我们在 main.js 中使用如下方式引入 Bootstrap 时:

// main.js
/* bootstarp */
import '@/assets/css/bootstrap.min.css'
import '@/assets/js/bootstrap.min.js'

我们必须保证拥有全局的 jQuery 环境。否则,在 Bootstrap 中会报缺少 jQuery 的错误。

在原项目中,在 webpack.base.conf.js 中,有一段关于 jQuery 的配置是这样的:

module.exports = {
  ...
  plugins: [
    new webpack.ProvidePlugin({
      $: "jquery",
      jQuery: "jquery",
      "windows.jQuery": "jquery"
    })
  ],
  ...
}

使用 webpack.ProvidePlugin 插件全局注入 jQuery,这样在项目构建启动运行后,项目中就有了全局的 jQuery 环境。

那么,在 Vite 的项目中,该如何来配置或者来实现这个功能呢?

方法一、全局静态引入

全局静态引入的意思,就是在项目的主页面文件 index.html 中,使用原始引入 js 文件的方式来引入 jquery

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <link rel="icon" type="image/svg+xml" href="/vite.svg" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Vite-Vue3</title>
    <script src="/src/jquery.min.js"></script>
  </head>
  <body>
    <div id="app"></div>
    <script type="module" src="/src/main.js"></script>
  </body>
</html>

方法二、使用插件 @rollup/plugin-inject 注入 jquery

首先,安装 jquery@rollup/plugin-inject.

npm i jquery @rollup/plugin-inject -S

在项目的配置文件 vite.config.js 中:

import inject from '@rollup/plugin-inject'

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    inject({
      $: "jquery",  // 这里会自动载入 node_modules 中的 jquery
      jQuery: "jquery",
      "windows.jQuery": "jquery"
    })
  ],
  resolve: {
    alias: {
      '@': resolve(__dirname, './src')
    }
  }
})

这样,即可在 Vite 项目中实现 webpack.ProvidePlugin 的功能。

课外知识:

一、关于 webpack.ProvidePlugin

  • 了解 webpack 的插件使用方式:
// webpack.base.conf.js
const HtmlWebpackPlugin = require('html-webpack-plugin')

module.exports = {
  ...
  plugins: [
    new webpack.ProvidePlugin({}),
    new webpack.IgnorePlugin('/^\.\/locale$/, /moment$/'),
    // or(或者)
    new HtmlWebpackPlugin({
      template: './src/index.html'
    })
  ]
  ...
}

这里面有两种 webpack 的插件使用方式:new webpack.ProvidePlugin()new HtmlWebpackPlugin();

前者是 webpack 内置的模块,后者不是 webpack 内置的模块,需要使用 npm 先进行安装再使用。

  • ProvidePlugin,是 webpack 的内置模块。
  • 使用 ProvidePlugin 加载的模块在使用时将不再需要 importrequire 进行引入。
  • jquery 为例,用 ProvidePlugin 进行实例初始化后,jquery 就会被自动加载并导入对应的 node 模块中。
new webpack.ProvidePlugin({
  $: 'jquery',
  jQuery: 'jquery'
})

// 然后我们可以在代码中直接使用

$('#item'); // <= just works
jQuery('#item'); // <= just works
// $ is automatically set to the exports of module "jquery"

二、使用 @rollup/plugin-node-resolve 解决模块之间引用问题

使用 @rollup/plugin-node-resolve 解决模块之间引用问题。

—————————— 【正文完】——————————

前端学习交流群,想进来面基的,可以加群: 832485817685486827
前端顶级学习交流群(一) 前端顶级学习交流群(二)

写在最后: 约定优于配置 —— 软件开发的简约原则

——————————【完】——————————

我的:
个人网站: https://neveryu.github.io/neveryu/
Github: https://github.com/Neveryu
微信: miracle421354532

更多学习资源请关注我的微信…好吗

<think>好的,我现在要解决用户提到的npm安装时出现的ERESOLVE依赖冲突问题,特别是与vite和@vitejs/plugin-vue相关的冲突。首先,我需要回忆一下常见的npm依赖冲突原因和解决方法。 用户的问题是关于安装时遇到的ERESOLVE错误,这个错误通常是由于不同包之间的依赖版本不兼容导致的。具体来说,当项目中的某个包依赖的另一个包版本与其他包所需的版本冲突时,npm无法找到满足所有依赖关系的解决方案,从而抛出这个错误。 首先,我应该考虑用户是否在安装vite或@vitejs/plugin-vue时遇到了问题。可能的情况是用户的项目中已有的依赖与这些包所需的版本不兼容。例如,可能某个插件需要vite的特定版本,而用户尝试安装的版本不符合这个要求。 接下来,我需要回忆解决这类问题的步骤。通常的解决方法包括:使用npm的legacy peer deps选项,手动更新或降级相关依赖版本,清理npm缓存,或者使用包管理工具的其他功能如overrides来强制解决冲突。 另外,用户可能需要检查他们的package.json文件,确保所有依赖的版本兼容。有时候,升级到最新的稳定版本可以解决问题,因为新版本可能已经修复了兼容性问题。此外,查看vite和@vitejs/plugin-vue的官方文档,确认它们之间的版本兼容性也很重要。 我还需要考虑用户是否可能在使用较旧版本的npm,因为npm 7及以上版本对peer dependencies的处理更为严格,这可能导致之前没有出现的冲突现在出现。因此,建议用户更新npm到最新版本,或者使用--legacy-peer-deps选项来绕过peer dependency的自动安装。 另外,可能存在的解决方案包括手动指定依赖版本,例如使用npm install vite@x.y.z @vitejs/plugin-vue@a.b.c,其中x.y.z和a.b.c是兼容的版本号。这需要用户查找这两个包的兼容版本组合。 最后,如果以上方法都不奏效,用户可能需要检查是否有其他依赖项间接引用了不兼容的vite版本,这时候可能需要更新或替换那些依赖项,或者使用npm的overrides字段在package.json中强制指定版本。 现在,我需要将这些思路整理成一个结构化的回答,确保步骤清晰,并且提供具体的命令示例。同时,生成相关问题,帮助用户进一步理解和解决类似问题。</think>### 解决 npm ERESOLVE 依赖冲突(vite 和 @vitejs/plugin-vue) #### 1. 理解错误原因 当安装依赖时,npm 会检查项目的依赖树是否满足所有包的版本兼容性要求。若 `vite` 和 `@vitejs/plugin-vue` 的版本不兼容,或与其他第三方包的依赖版本冲突,则会触发 `ERESOLVE` 错误。例如: ```bash npm ERR! Could not resolve dependency: npm ERR! peer vite@"^3.0.0" from @vitejs/plugin-vue@4.5.0 ``` #### 2. 通用解决方法 **方法一:使用 `--legacy-peer-deps` 绕过冲突** ```bash npm install --legacy-peer-deps ``` 此命令会忽略 peer dependencies 的版本冲突,但可能导致运行时兼容性问题[^1]。 **方法二:更新或降级依赖版本** - 查看 `vite` 和 `@vitejs/plugin-vue` 的官方兼容性文档,例如: - `@vitejs/plugin-vue@4.x` 需要 `vite@^3.0.0` - `@vitejs/plugin-vue@3.x` 需要 `vite@^2.9.0` - 手动指定兼容版本: ```bash npm install vite@3.2.5 @vitejs/plugin-vue@4.5.0 ``` **方法三:清理缓存并重试** ```bash npm cache clean --force rm -rf node_modules package-lock.json npm install ``` **方法四:使用 `overrides` 强制版本(npm 8+)** 在 `package.json` 中添加: ```json { "overrides": { "vite": "3.2.5", "@vitejs/plugin-vue": "4.5.0" } } ``` 然后运行 `npm install`。 --- #### 3. 针对 Vite 生态的版本匹配建议 | Vite 版本 | @vitejs/plugin-vue 版本 | Vue 版本 | |-----------|-------------------------|----------------| | 5.x | 5.x | Vue 3.3+ | | 4.x | 4.x | Vue 3.2+ | | 3.x | 3.x | Vue 3.0+ | --- #### 4. 验证依赖树 检查依赖关系是否已解决: ```bash npm ls vite @vitejs/plugin-vue ``` --- ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值