我正在启动一个新的 vue.js 项目,因此我使用 vue-cli 工具搭建一个新的 webpack 项目(即
vue init webpack
)。
当我浏览生成的文件时,我注意到
src/router/index.js
文件中存在以下导入:
import Vue from 'vue'
import Router from 'vue-router'
import Hello from '@/components/Hello' // <- this one is what my question is about
Vue.use(Router)
export default new Router({
routes: [
{
path: '/',
name: 'Hello',
component: Hello
}
]
})
我以前没有在路径中看到过 at 符号 (
@
)。我怀疑它允许相对路径(也许?),但我想确保我理解它真正的作用。
我尝试在网上搜索,但无法找到解释(可能是因为搜索“at 符号”或使用文字字符
@
作为搜索条件没有帮助)。
@
在这条路径中做了什么(链接到文档会很棒),这是 es6 的东西吗?一个 webpack 的东西? vue-loader 的东西?
谢谢 Felix Kling 向我指出关于同一问题的另一个重复的 stackoverflow 问题/答案。
虽然其他 stackoverflow 帖子上的评论并不是这个问题的确切答案(在我的例子中它不是 babel 插件),但它确实为我指明了找到它是什么的正确方向。
在 vue-cli 为您构建的脚手架中,基础 webpack 配置的一部分为 .vue 文件设置了别名:
这是有意义的,因为它为您提供了 src 文件的相对路径 并且它消除了导入路径末尾的
.vue
的要求(您通常需要)。
感谢您的帮助!
resolve.alias
配置选项完成的,并非特定于 Vue。
在Vue Webpack模板中,Webpack配置为将
@/
替换为src
路径:
const path = require('path');
...
resolve: {
extensions: ['.js', '.vue', '.json'],
alias: {
...
'@': path.resolve('src'),
}
},
...
别名用作:
import '@/<path inside src folder>';
另请记住,您也可以在 tsconfig 中创建变量:
"paths": {
"@components": ["src/components"],
"@scss": ["src/styles/scss"],
"@img": ["src/assests/images"],
"@": ["src"],
}
这可用于命名约定目的:
import { componentHeader } from '@components/header';
我通过以下组合克服了
import HelloWorld from '@/components/HelloWorld'
=>
import HelloWorld from 'src/components/HelloWorld'
IDE 将停止警告 uri,但这会导致编译时“build\webpack.base.conf.js”中的 uri 无效
resolve: {
extensions: ['.js', '.vue', '.json'],
alias: {
'src': resolve('src'),
}
},
宾果!
也许尝试添加到 webpack 中。 mix.webpackConfig参考laravel mix。
mix.webpackConfig({
resolve: {
alias: {
'@imgSrc': path.resolve('resources/assets/img')
}
}
});
然后在vue中使用。
<img src="@imgSrc/logo.png" />
解决('src') 没有适合我的作品 但 路径.resolve('src') 作品
resolve: {
alias: {
'vue$': 'vue/dist/vue.esm.js',
'@': path.resolve('src')
},
extensions: ['*', '.js', '.vue', '.json']
},
一定有什么改变了。这里给出的答案不再正确。 Chapter09中的这个项目在其导入语句中使用了@符号,但是webpack.config.js文件没有路径解析语句:
let service = process.VUE_CLI_SERVICE
if (!service || process.env.VUE_CLI_API_MODE) {
const Service = require('./lib/Service')
service = new Service(process.env.VUE_CLI_CONTEXT || process.cwd())
service.init(process.env.VUE_CLI_MODE || process.env.NODE_ENV)
}
module.exports = service.resolveWebpackConfig()
vite.config.js
// https://vitejs.dev/config/
export default defineConfig({
plugins: [vue(),vueJsx()],
resolve: {
alias: {
"@": fileURLToPath(new URL("./src", import.meta.url)),
},
},
});
“src”。
我已经配置了我的webpack.common.js
文件,如下所示
resolve: {
extensions: [".ts", ".js", ".vue"],
alias: {
'@': path.resolve(__dirname,'src/')
}
}
我已经像这样导入了vuex商店import store from "@/store";
而不是
import store from "../store"
您可以在此处阅读有关 Vue 中的 Webpack 别名 的更多信息
next.config.js
添加下一个内容。
const path = require('path');
module.exports = {
webpack: (config, options) => {
config.resolve.alias = {
'@': path.resolve(process.cwd(), 'src'),
};
return config;
}
};
import { createApp, markRaw } from "vue";
import { createPinia } from "pinia";
import App from "./App.vue";
import router from "./router";
const app = createApp(App);
const pinia = createPinia()
pinia.use(({ store })=>{ store.$router = markRaw(router) })
app.use(pinia);
app.use(router);
app.mount("#app");