vite cdn 引入vue时报错
Uncaught TypeError: Failed to resolve module specifier "vue". Relative references must start with either "/", "./", or "../".
import importToCDN from 'vite-plugin-cdn-import';
//在plugins中加入
importToCDN({
modules: [
{
name: 'vue',
var: 'Vue',
path: 'https://cdn.jsdelivr.net/npm/vue@3.2.25/dist/vue.global.prod.js'
},
]
}),
突然就来上面的错,这个情况是因为还有其他组件引用到vue了,需要将该组件一并通过cdn的方式引入就可以解决;(至于什么组件有关联引用这个要自己去排查)
一、第一种方案(通过vite-plugin-cdn-import)
import importToCDN from 'vite-plugin-cdn-import';
importToCDN({
modules: [
{
name: 'vue',
var: 'Vue',
path: 'https://cdn.jsdelivr.net/npm/vue@3.2.25/dist/vue.global.prod.js'
},
{
name: 'vue-i18n',
var: 'VueI18n',
path: 'https://cdn.bootcdn.net/ajax/libs/vue-i18n/9.1.10/vue-i18n.global.prod.min.js'
},
{
name: 'vue-router',
var: 'VueRouter',
path: 'https://unpkg.com/vue-router@4.0.16/dist/vue-router.global.prod.js'
},
{
name: 'element-plus',
var: 'ElementPlus',
path: `https://unpkg.com/element-plus@2.2.6/dist/index.full.js`,
css: 'https://unpkg.com/element-plus/dist/index.css'
},
{
name: 'vue-demi',
var: 'VueDemi',
path: 'https://cdn.bootcdn.net/ajax/libs/vue-demi/0.13.1/index.iife.js'
},
{
name: 'pinia',
var: 'Pinia',
path: 'https://cdn.bootcdn.net/ajax/libs/pinia/2.0.14/pinia.iife.prod.min.js'
},
{
name: '@smallwei/avue',
var: 'AVUE',
path: 'https://cdn.jsdelivr.net/npm/@smallwei/avue@3.0.17'
}
]
}),
这上面的都有引用关系所以都需要通过cdn的方式引入
VueDemi这个是pinia用来判断是vue2还是vue3所需要的,要额外引入一下
二、第二种方案(通过rollup-plugin-external-globals)这个方式需要单独在index.html中引入cdn资源
import externalGlobals from 'rollup-plugin-external-globals';
let globals = externalGlobals({
vue: 'Vue',
'vue-i18n': 'VueI18n',
'vue-router': 'VueRouter',
'element-plus': 'ElementPlus',
pinia: 'Pinia',
'@smallwei/avue': 'AVUE'
});
//vite.config.ts(注意plugins的位置是在build下)
build:{
rollupOptions:{
// 忽略打包
external: ['vue', 'vue-i18n', 'pinia', 'vue-router', 'element-plus','@smallwei/avue'],
},
plugins: [globals],
}
// index.html
<script src="https://cdn.jsdelivr.net/npm/vue@3.2.25/dist/vue.global.prod.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/vue-i18n/9.1.10/vue-i18n.global.prod.min.js"></script>
<script src="https://unpkg.com/vue-router@4.0.16/dist/vue-router.global.prod.js"></script>
<script src="https://unpkg.com/element-plus@2.2.6/dist/index.full.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/vue-demi/0.13.1/index.iife.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/pinia/2.0.14/pinia.iife.prod.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@smallwei/avue@3.0.17"></script>
这样就解决了
代码地址
- gitee:gitee.com/virtual1680…
- github:github.com/virtual1680…