Import ES6 za pomocą ścieżki logowania at ( ' @ ' ) w vue.projekt js przy użyciu Webpack
Zaczynam nową vue.projekt js więc użyłem narzędzia vue-cli do rusztowania nowego projektu webpack (tj. vue init webpack
).
Gdy przechodziłem przez wygenerowane pliki zauważyłem następujący import w pliku src/router/index.js
:
import Vue from 'vue'
import Router from 'vue-router'
import Hello from '@/components/Hello' // <- this one is what my qusestion is about
Vue.use(Router)
export default new Router({
routes: [
{
path: '/',
name: 'Hello',
component: Hello
}
]
})
Nie widziałem wcześniej znaku at (@
) na ścieżce. Podejrzewam, że pozwala na ścieżki względne (może?), ale chciałem mieć pewność, że rozumiem, co naprawdę robi.
Próbowałem szukać w Internecie, ale nie byłem w stanie znaleźć Wyjaśnienie (prob, ponieważ szukanie "at sign" lub użycie literalnego znaku @
nie pomaga jako kryteria wyszukiwania).
Co robi @
w tej ścieżce (link do dokumentacji byłby fantastyczny) i czy to coś es6? Webpack? Vue-loader?
UPDATE
Dzięki Felixowi Klingowi za wskazanie mi kolejnego duplikatu pytania/odpowiedzi na to samo pytanie.
Podczas gdy komentarz do drugiego postu stackoverflow nie jest dokładnie odpowiedź na to pytanie (w moim przypadku nie była to wtyczka babel) wskazała mi właściwy kierunek, aby znaleźć to, co to było.
W rusztowaniu, które vue-cli dla Ciebie wykręca, część podstawowego konfiguratora webpack ustawia alias dla .pliki vue:
Ma to sens zarówno w tym, że daje względną ścieżkę z pliku src , jak i usuwa wymóg .vue
na końcu ścieżki importu (której zwykle potrzebujesz).
Dzięki za pomoc!
6 answers
Robi się to za pomocą Webpacka resolve.alias
Opcja konfiguracji i nie jest specyficzna dla Vue.
W szablonie Vue Webpack , Webpack jest skonfigurowany tak, aby zastąpić @/
src
ścieżka :
const path = require('path');
...
resolve: {
extensions: ['.js', '.vue', '.json'],
alias: {
...
'@': path.resolve('src'),
}
},
...
Alias jest używany jako:
import '@/<path inside src folder>';
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-01-30 14:28:49
Należy również pamiętać, że można również tworzyć zmienne w tsconfig:
"paths": {
"@components": ["src/components"],
"@scss": ["src/styles/scss"],
"@img": ["src/assests/images"],
"@": ["src"],
}
Można to wykorzystać do celów konwencji nazewnictwa:
import { componentHeader } from '@components/header';
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-04-19 15:39:40
I get over with following combination
import HelloWorld from '@/components/HelloWorld'
=>
import HelloWorld from 'src/components/HelloWorld'
IDE przestanie ostrzegać uri, ale spowoduje to nieprawidłowe uri podczas kompilacji, w " build \ webpack.baza.conf.js "
resolve: {
extensions: ['.js', '.vue', '.json'],
alias: {
'src': resolve('src'),
}
},
Bingoo!Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-06-12 14:41:15
Może spróbuj dodać w webpack. mix.webpackconfig referencje Laravel mix .
mix.webpackConfig({
resolve: {
alias: {
'@imgSrc': path.resolve('resources/assets/img')
}
}
});
A następnie w użyciu vue.
<img src="@imgSrc/logo.png" />
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-05-22 17:43:46
resolve ('src') no works for me ale / align = "left" / resolve ("src") prace
resolve: {
alias: {
'vue$': 'vue/dist/vue.esm.js',
'@': path.resolve('src')
},
extensions: ['*', '.js', '.vue', '.json']
},
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-09-17 22:16:29
Coś musiało się zmienić. Odpowiedź tutaj nie jest już poprawna. Ten projekt w rozdziale 09 używa znaku @ w poleceniach import, ale webpack.config.plik js nie posiada instrukcji Path resolve:
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()
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-07-16 17:29:40