请问可以替换掉node_modules里的externals吗
Closed this issue · 4 comments
CDN引的vue.js文件,另外还用了VueUse,这个库里其中一个依赖VueDemi,用到了Vue,打包出来导致报错。
TypeError: Failed to resolve module specifier "vue". Relative references must start with either "/", "./", or "../".
尝试过vite-plugin-externals这个插件,但是出现了另一个报错:
"shallowRef" is not exported by "../node_modules/vue-demi/lib/index.mjs"
@Ezra-Chan 有没有最小化demo,另外列一下你用的vite版本和vue版本,我发布了一个新版本,你配置一个新属性mode
设置为false
看能不能解决。
@Ezra-Chan 有没有最小化demo,另外列一下你用的vite版本和vue版本,我发布了一个新版本,你配置一个新属性
mode
设置为false
看能不能解决。
mode设为false未生效,我尝试搞了一个demo出来
https://github.com/Ezra-Chan/cdn-vue-demo
安装依赖后,执行build命令,打包完后在pluginTemp文件夹下有一个index.html,用Live Server打开该html,即可在控制台看到报错:
TypeError: Failed to resolve module specifier "vue". Relative references must start with either "/", "./", or "../".
如您有时间,帮忙看下,谢谢🙏
"vite": "^5.0.8"
"vue": "3.3.9"
@Ezra-Chan 我试了一下,稍微改动了一下,demo在build之后可以正常运行。
vite.config.js
build: {
target: "es2015",
rollupOptions: {
- external: Object.keys(externalGlobalsObj),
output: {
entryFileNames: "assets/app.[hash].js",
assetFileNames: "media/[name]-[hash].[ext]",
},
},
}
执行npm run build
之后执行npm run preview
后打开http://localhost:4173/
出现下面的错误
GET http://localhost:4173/source/vue/vue.prod.js net::ERR_ABORTED 404 (Not Found)
配置一个copy插件把pluginTemp/source
复制到dist/source
,如下
import { defineConfig } from "vite";
import path from "path";
import vue from "@vitejs/plugin-vue";
import cssInjectedByJsPlugin from "vite-plugin-css-injected-by-js";
import vitePluginExternal from "vite-plugin-external";
+import cp from 'vite-plugin-cp';
// 全局对象
const externalGlobalsObj = {
vue: "Vue",
"element-plus": "ElementPlus",
// vuex: "Vuex",
};
// https://vitejs.dev/config/
export default defineConfig({
base: "./",
resolve: {
alias: {
"@": path.resolve(__dirname, "src"),
},
extensions: [".js", ".json", ".ts", ".vue"],
},
plugins: [
vue(),
cssInjectedByJsPlugin(), // 将css打进js
vitePluginExternal({
externals: externalGlobalsObj,
mode: false,
}),
+ cp({
+ targets: [
+ {
+ src: "pluginTemp/source",
+ dest: "dist/source",
+ flatten: false
+ },
+ ],
+ })
],
build: {
target: "es2015",
rollupOptions: {
- external: Object.keys(externalGlobalsObj),
output: {
entryFileNames: "assets/app.[hash].js",
assetFileNames: "media/[name]-[hash].[ext]",
},
},
},
});
再次执行npm run build
之后执行npm run preview
后打开http://localhost:4173/
@fengxinming 去掉rollupOptions
的external
配置后确实可以了,非常感谢您提供的这个插件以及解答🙇
另外source
文件夹我是自己写了脚本给复制到dist
下,build
命令里执行了该脚本,preview
因为不用这个命令就没加,不过也是不知道有这个cp插件,感谢推荐