导入 axios 导致 vue v3 和 vite 出现问题
import axios causes problems in vue v3 and vite
import axios from 'axios';
投票结果
Uncaught SyntaxError: import not found: default
示例代码
import { createApp } from 'vue';
import TheContainer from './components/TheContainer.vue';
import axios from 'axios';
axios.defaults.baseURL = process.env.VUE_APP_API_URL;
const app = createApp({
components: {
TheContainer
}
})
app.axios = axios;
app.$http = axios;
app.config.globalProperties.axios = axios;
app.config.globalProperties.$http = axios;
app.mount('#app');
这是使用 axios 0.21.1 和 vue 3.0.5
正在尝试找出问题所在...遗憾的是,vuejs v3 cookbook 通过 cdn 调用了 axios 0.14 代码
你应该安装一个 axios 的捆绑 es 模块:
删除当前版本:
npm uninstall axios
然后 运行:
npm install @bundled-es-modules/axios --save
然后像这样使用它:
import { createApp } from 'vue';
import TheContainer from './components/TheContainer.vue';
import axios from 'axios/axios.js';
//create an axios instance in order to use it globally with same config
const instance = axios.create({
baseURL: process.env.VUE_APP_API_URL,
withCredentials: false,
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
},
})
const app = createApp({
components: {
TheContainer
}
})
app.config.globalProperties.axios = instance;
app.mount('#app');
看起来问题出在 Vite 2.x
issue #174 and issue 162 表明 vite 更愿意处理适当的 ESM 模块,而不是在自身内部修复它们(公平调用)..
从 vite 2.0.0-beta50 开始,我将使用 fetch 构建它并丢弃 vue-auth(无论如何对于 vue v3 来说它看起来非常复杂)
编辑:从来没有深究过这个问题,但由于我是在 Laravel 中的 Homestead/Vagrant 中构建它的 - 我发现将它完全从那个环境中取出似乎可以解决问题..我还注意到 Vite 并不总是注意到 Homestead/laravel 环境中的代码更改 - 所以它可能是缓存或其他东西......无论如何我把它拿出来并且一切正常
Redaxios 是 axios 的现代翻版。
import axios from 'redaxios';
// use as you would normally
这解决了我使用 vite 和 axios 的问题。也适用于 webpack。
所以,这个问题花了我一些时间来解决,我想分享我的经验,希望它能帮助到别人。
尽管此答案中的一些解决方案有助于解决最初的问题,但在此过程中我遇到了其他问题。例如,当我安装 redaxios
时,我注意到它没有在请求 headers 中发送 X-XSRF-TOKEN
(我的后端服务需要 Laravel Sanctum)。
最后真正解决我的问题的是删除 node_modules
目录并重新安装 (yarn
)。我认为 vite 有一个已安装目录的缓存版本,无论我重新安装多少次 axios
或在包之间切换它总是显示一些错误。
你应该安装这个vite插件@originjs/vite-plugin-commonjs。
npm install @originjs/vite-plugin-commonjs --save-dev
将插件添加到您的 vite.config.ts
就可以了。
import { viteCommonjs } from '@originjs/vite-plugin-commonjs'
export default {
plugins: [
viteCommonjs()
]
}
就这些了
import axios from 'axios';
投票结果
示例代码Uncaught SyntaxError: import not found: default
import { createApp } from 'vue';
import TheContainer from './components/TheContainer.vue';
import axios from 'axios';
axios.defaults.baseURL = process.env.VUE_APP_API_URL;
const app = createApp({
components: {
TheContainer
}
})
app.axios = axios;
app.$http = axios;
app.config.globalProperties.axios = axios;
app.config.globalProperties.$http = axios;
app.mount('#app');
这是使用 axios 0.21.1 和 vue 3.0.5
正在尝试找出问题所在...遗憾的是,vuejs v3 cookbook 通过 cdn 调用了 axios 0.14 代码
你应该安装一个 axios 的捆绑 es 模块:
删除当前版本:
npm uninstall axios
然后 运行:
npm install @bundled-es-modules/axios --save
然后像这样使用它:
import { createApp } from 'vue';
import TheContainer from './components/TheContainer.vue';
import axios from 'axios/axios.js';
//create an axios instance in order to use it globally with same config
const instance = axios.create({
baseURL: process.env.VUE_APP_API_URL,
withCredentials: false,
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
},
})
const app = createApp({
components: {
TheContainer
}
})
app.config.globalProperties.axios = instance;
app.mount('#app');
看起来问题出在 Vite 2.x
issue #174 and issue 162 表明 vite 更愿意处理适当的 ESM 模块,而不是在自身内部修复它们(公平调用)..
从 vite 2.0.0-beta50 开始,我将使用 fetch 构建它并丢弃 vue-auth(无论如何对于 vue v3 来说它看起来非常复杂)
编辑:从来没有深究过这个问题,但由于我是在 Laravel 中的 Homestead/Vagrant 中构建它的 - 我发现将它完全从那个环境中取出似乎可以解决问题..我还注意到 Vite 并不总是注意到 Homestead/laravel 环境中的代码更改 - 所以它可能是缓存或其他东西......无论如何我把它拿出来并且一切正常
Redaxios 是 axios 的现代翻版。
import axios from 'redaxios';
// use as you would normally
这解决了我使用 vite 和 axios 的问题。也适用于 webpack。
所以,这个问题花了我一些时间来解决,我想分享我的经验,希望它能帮助到别人。
尽管此答案中的一些解决方案有助于解决最初的问题,但在此过程中我遇到了其他问题。例如,当我安装 redaxios
时,我注意到它没有在请求 headers 中发送 X-XSRF-TOKEN
(我的后端服务需要 Laravel Sanctum)。
最后真正解决我的问题的是删除 node_modules
目录并重新安装 (yarn
)。我认为 vite 有一个已安装目录的缓存版本,无论我重新安装多少次 axios
或在包之间切换它总是显示一些错误。
你应该安装这个vite插件@originjs/vite-plugin-commonjs。
npm install @originjs/vite-plugin-commonjs --save-dev
将插件添加到您的 vite.config.ts
就可以了。
import { viteCommonjs } from '@originjs/vite-plugin-commonjs'
export default {
plugins: [
viteCommonjs()
]
}
就这些了