diff --git a/packages/create-rspack/template-vue-js/package.json b/packages/create-rspack/template-vue-js/package.json index d4b8f17fa061..ad213a956b8a 100644 --- a/packages/create-rspack/template-vue-js/package.json +++ b/packages/create-rspack/template-vue-js/package.json @@ -13,6 +13,6 @@ "devDependencies": { "@rspack/cli": "workspace:*", "@rspack/core": "workspace:*", - "vue-loader": "^17.4.2" + "rspack-vue-loader": "^17.4.5" } } diff --git a/packages/create-rspack/template-vue-js/rspack.config.mjs b/packages/create-rspack/template-vue-js/rspack.config.mjs index 6520a45a3169..71ddc927a469 100644 --- a/packages/create-rspack/template-vue-js/rspack.config.mjs +++ b/packages/create-rspack/template-vue-js/rspack.config.mjs @@ -1,7 +1,7 @@ // @ts-check import { defineConfig } from '@rspack/cli'; import { rspack } from '@rspack/core'; -import { VueLoaderPlugin } from 'vue-loader'; +import { VueLoaderPlugin } from 'rspack-vue-loader'; // Target browsers, see: https://github.com/browserslist/browserslist const targets = ['last 2 versions', '> 0.2%', 'not dead', 'Firefox ESR']; @@ -17,7 +17,7 @@ export default defineConfig({ rules: [ { test: /\.vue$/, - loader: 'vue-loader', + loader: 'rspack-vue-loader', options: { experimentalInlineMatchResource: true, }, diff --git a/packages/create-rspack/template-vue-ts/package.json b/packages/create-rspack/template-vue-ts/package.json index 4c8dd11137df..782d7af1ace5 100644 --- a/packages/create-rspack/template-vue-ts/package.json +++ b/packages/create-rspack/template-vue-ts/package.json @@ -14,6 +14,6 @@ "@rspack/cli": "workspace:*", "@rspack/core": "workspace:*", "typescript": "^5.9.3", - "vue-loader": "^17.4.2" + "rspack-vue-loader": "^17.4.5" } } diff --git a/packages/create-rspack/template-vue-ts/rspack.config.ts b/packages/create-rspack/template-vue-ts/rspack.config.ts index e6bca03f4594..844caa0afbc3 100644 --- a/packages/create-rspack/template-vue-ts/rspack.config.ts +++ b/packages/create-rspack/template-vue-ts/rspack.config.ts @@ -4,7 +4,7 @@ import { rspack, type SwcLoaderOptions, } from '@rspack/core'; -import { VueLoaderPlugin } from 'vue-loader'; +import { VueLoaderPlugin } from 'rspack-vue-loader'; // Target browsers, see: https://github.com/browserslist/browserslist const targets = ['last 2 versions', '> 0.2%', 'not dead', 'Firefox ESR']; @@ -20,7 +20,7 @@ export default defineConfig({ rules: [ { test: /\.vue$/, - loader: 'vue-loader', + loader: 'rspack-vue-loader', options: { experimentalInlineMatchResource: true, }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 257445961ef0..787fb12e404f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -319,9 +319,9 @@ importers: '@rspack/core': specifier: workspace:* version: link:../../rspack - vue-loader: - specifier: ^17.4.2 - version: 17.4.2(vue@3.5.26(typescript@5.9.3))(webpack@5.102.1) + rspack-vue-loader: + specifier: ^17.4.5 + version: 17.4.5(vue@3.5.26(typescript@5.9.3))(webpack@5.102.1) packages/create-rspack/template-vue-ts: dependencies: @@ -335,12 +335,12 @@ importers: '@rspack/core': specifier: workspace:* version: link:../../rspack + rspack-vue-loader: + specifier: ^17.4.5 + version: 17.4.5(vue@3.5.26(typescript@5.9.3))(webpack@5.102.1) typescript: specifier: ^5.9.3 version: 5.9.3 - vue-loader: - specifier: ^17.4.2 - version: 17.4.2(vue@3.5.26(typescript@5.9.3))(webpack@5.102.1) packages/rspack: dependencies: @@ -690,6 +690,9 @@ importers: react-refresh: specifier: ^0.18.0 version: 0.18.0 + rspack-vue-loader: + specifier: ^17.4.5 + version: 17.4.5(vue@3.5.26(typescript@5.9.3))(webpack@5.102.1) tailwindcss: specifier: ^3.4.19 version: 3.4.19(ts-node@10.9.2(@types/node@20.19.27)(typescript@5.9.3)) @@ -699,9 +702,6 @@ importers: vue: specifier: ^3.5.26 version: 3.5.26(typescript@5.9.3) - vue-loader: - specifier: ^17.4.2 - version: 17.4.2(vue@3.5.26(typescript@5.9.3))(webpack@5.102.1) ws: specifier: ^8.18.3 version: 8.18.3 @@ -5772,9 +5772,6 @@ packages: resolution: {integrity: sha512-Bb33KbowVTIj5s7Ked1OsqHUeCpz//tPwR+E2zJgJKo9Z5XolZ9b6bdUgjmYlwnWhoOQKoTd1TYToZGn5mAYOg==} engines: {node: '>= 0.8'} - hash-sum@2.0.0: - resolution: {integrity: sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==} - hash.js@1.1.7: resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} @@ -7582,6 +7579,18 @@ packages: '@rsbuild/core': optional: true + rspack-vue-loader@17.4.5: + resolution: {integrity: sha512-i88hGa4mySkwiP7HqRICIAhomcMdkNCZ5tQGcxkcUWmDfC2QfeQegFBEKY4RdbuxJ3p1Ocj/Ul6Sh4yl6L7mDg==} + peerDependencies: + '@vue/compiler-sfc': '*' + vue: '*' + webpack: ^5.0.0 + peerDependenciesMeta: + '@vue/compiler-sfc': + optional: true + vue: + optional: true + rspress-plugin-font-open-sans@1.0.3: resolution: {integrity: sha512-17i7uUqvyy5k51ggZJ5xoP9duqC2W76GcBviIu400VXXAQEZx3JzZWPcGz9gGmVaFHAkH19NtZK0EYKfneX4rw==} peerDependencies: @@ -8537,18 +8546,6 @@ packages: vscode-uri@3.1.0: resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==} - vue-loader@17.4.2: - resolution: {integrity: sha512-yTKOA4R/VN4jqjw4y5HrynFL8AK0Z3/Jt7eOJXEitsm0GMRHDBjCfCiuTiLP7OESvsZYo2pATCWhDqxC5ZrM6w==} - peerDependencies: - '@vue/compiler-sfc': '*' - vue: '*' - webpack: ^4.1.0 || ^5.0.0-0 - peerDependenciesMeta: - '@vue/compiler-sfc': - optional: true - vue: - optional: true - vue@3.5.26: resolution: {integrity: sha512-SJ/NTccVyAoNUJmkM9KUqPcYlY+u8OVL1X5EW9RIs3ch5H2uERxyyIUI4MRxVCSOiEcupX9xNGde1tL9ZKpimA==} peerDependencies: @@ -13775,8 +13772,6 @@ snapshots: safe-buffer: 5.2.1 to-buffer: 1.2.2 - hash-sum@2.0.0: {} - hash.js@1.1.7: dependencies: inherits: 2.0.4 @@ -16096,6 +16091,14 @@ snapshots: optionalDependencies: '@rsbuild/core': 1.7.2 + rspack-vue-loader@17.4.5(vue@3.5.26(typescript@5.9.3))(webpack@5.102.1): + dependencies: + chalk: 4.1.2 + watchpack: 2.4.4 + webpack: 5.102.1 + optionalDependencies: + vue: 3.5.26(typescript@5.9.3) + rspress-plugin-font-open-sans@1.0.3(@rspress/core@2.0.0-rc.4(@types/react@19.2.7)): dependencies: '@rspress/core': 2.0.0-rc.4(@types/react@19.2.7) @@ -17084,15 +17087,6 @@ snapshots: vscode-uri@3.1.0: {} - vue-loader@17.4.2(vue@3.5.26(typescript@5.9.3))(webpack@5.102.1): - dependencies: - chalk: 4.1.2 - hash-sum: 2.0.0 - watchpack: 2.4.4 - webpack: 5.102.1 - optionalDependencies: - vue: 3.5.26(typescript@5.9.3) - vue@3.5.26(typescript@5.9.3): dependencies: '@vue/compiler-dom': 3.5.26 diff --git a/tests/e2e/cases/vue3/rspack.config.js b/tests/e2e/cases/vue3/rspack.config.js index c0ec2af72a12..1412af1a740d 100644 --- a/tests/e2e/cases/vue3/rspack.config.js +++ b/tests/e2e/cases/vue3/rspack.config.js @@ -1,5 +1,5 @@ const { DefinePlugin, HtmlRspackPlugin } = require('@rspack/core'); -const { VueLoaderPlugin } = require('vue-loader'); +const { VueLoaderPlugin } = require('rspack-vue-loader'); /** @type { import('@rspack/core').RspackOptions } */ module.exports = { @@ -26,7 +26,7 @@ module.exports = { rules: [ { test: /\.vue$/, - loader: 'vue-loader', + loader: 'rspack-vue-loader', options: { experimentalInlineMatchResource: true, }, diff --git a/tests/e2e/package.json b/tests/e2e/package.json index 91aec6b99d9e..544df3c9b94e 100644 --- a/tests/e2e/package.json +++ b/tests/e2e/package.json @@ -26,7 +26,7 @@ "typescript": "^5.9.3", "tailwindcss": "^3.4.19", "vue": "^3.5.26", - "vue-loader": "^17.4.2", + "rspack-vue-loader": "^17.4.5", "css-loader": "^7.1.2", "ws": "^8.18.3" } diff --git a/website/docs/en/guide/migration/webpack.mdx b/website/docs/en/guide/migration/webpack.mdx index 446cb84a00a3..1df5511a1651 100644 --- a/website/docs/en/guide/migration/webpack.mdx +++ b/website/docs/en/guide/migration/webpack.mdx @@ -22,7 +22,7 @@ Now you can remove the webpack-related dependencies from your project: :::tip -In some cases, you will still need to keep `webpack` as a dev dependency, such as when using [vue-loader](https://github.com/vuejs/vue-loader). +In some cases, you will still need to keep `webpack` as a dev dependency, such as when using [vue-loader](https://github.com/vuejs/vue-loader) (you can use [rspack-vue-loader](https://github.com/rstackjs/rspack-vue-loader) instead). This is because these packages directly `import` subpaths of webpack and couple with webpack. If you encounter this issue, you can provide feedback to the maintainers of these plugins, asking them if they can make `webpack` an optional dependency. ::: diff --git a/website/docs/en/guide/tech/vue.mdx b/website/docs/en/guide/tech/vue.mdx index 4a6aab6db717..7d97e57da1c1 100644 --- a/website/docs/en/guide/tech/vue.mdx +++ b/website/docs/en/guide/tech/vue.mdx @@ -11,11 +11,11 @@ Rspack provides two solutions to support Vue: ## Vue 3 -Currently, Vue 3 is supported by Rspack. Please make sure your [vue-loader](https://github.com/vuejs/vue-loader) version is >= 17.2.2 and configure as follows: +Currently, Vue 3 is supported by Rspack. Please make sure your [rspack-vue-loader](https://github.com/rstackjs/rspack-vue-loader) version is >= 17.2.2 and configure as follows: ```js title="rspack.config.mjs" import { defineConfig } from '@rspack/cli'; -import { VueLoaderPlugin } from 'vue-loader'; +import { VueLoaderPlugin } from 'rspack-vue-loader'; export default defineConfig({ plugins: [new VueLoaderPlugin()], @@ -23,7 +23,7 @@ export default defineConfig({ rules: [ { test: /\.vue$/, - loader: 'vue-loader', + loader: 'rspack-vue-loader', options: { // Note, for the majority of features to be available, make sure this option is `true` experimentalInlineMatchResource: true, diff --git a/website/docs/zh/guide/migration/webpack.mdx b/website/docs/zh/guide/migration/webpack.mdx index fc254de445a1..5e30285d0d44 100644 --- a/website/docs/zh/guide/migration/webpack.mdx +++ b/website/docs/zh/guide/migration/webpack.mdx @@ -21,7 +21,7 @@ Rspack 的配置是基于 webpack 的设计实现的,以此你能够非常轻 :::tip -在个别情况下,你仍然需要保留 `webpack` 作为开发依赖,例如使用 [vue-loader](https://github.com/vuejs/vue-loader) 时。 +在个别情况下,你仍然需要保留 `webpack` 作为开发依赖,例如使用 [vue-loader](https://github.com/vuejs/vue-loader) 时 (你可以使用 [rspack-vue-loader](https://github.com/rstackjs/rspack-vue-loader) 替代)。 这是因为这些库直接 `import` 了 webpack 的子路径,与 webpack 产生了耦合。如果你遇到了这种情况,可以向这些插件的维护者反馈,询问他们能否将 `webpack` 作为可选依赖。 ::: diff --git a/website/docs/zh/guide/tech/vue.mdx b/website/docs/zh/guide/tech/vue.mdx index 9c30bdd4cc03..e56b98d96e75 100644 --- a/website/docs/zh/guide/tech/vue.mdx +++ b/website/docs/zh/guide/tech/vue.mdx @@ -11,11 +11,11 @@ Rspack 提供两种方案来支持 Vue: ## Vue 3 -目前,Rspack 已经完成了对 Vue 3 的支持,请确保你的 [vue-loader](https://github.com/vuejs/vue-loader) 版本 >= 17.2.2,并进行如下配置: +目前,Rspack 已经完成了对 Vue 3 的支持,请确保你的 [rspack-vue-loader](https://github.com/rstackjs/rspack-vue-loader) 版本 >= 17.2.2,并进行如下配置: ```js title="rspack.config.mjs" import { defineConfig } from '@rspack/cli'; -import { VueLoaderPlugin } from 'vue-loader'; +import { VueLoaderPlugin } from 'rspack-vue-loader'; export default defineConfig({ plugins: [new VueLoaderPlugin()], @@ -23,7 +23,7 @@ export default defineConfig({ rules: [ { test: /\.vue$/, - loader: 'vue-loader', + loader: 'rspack-vue-loader', options: { // 注意,为了绝大多数功能的可用性,请确保该选项为 `true` experimentalInlineMatchResource: true,