Как использовать vue-loader без vue-cli
Я пытаюсь собрать абсолютный минимальный пример проекта Vue, который использует webpack для пересылки файлов.vue.
Моя цель - понять каждый шаг сборки в деталях. Большинство учебных пособий советуют использовать vue-cli
и использовать webpack-simple
. И хотя эта настройка работает, она кажется излишней для моей простой цели. На данный момент я не хочу использовать babel, linting или живой веб-сервер с горячей перезагрузкой модуля.
Минимальный пример с использованием только import Vue from 'vue'
! Webpack компилирует vue-библиотеку и мой собственный код в один пакет.
Но теперь я хочу добавить vue-loader в конфигурацию webpack, так что файлы .vue
будут переданы. Я установил загрузчик vue:
npm install vue-loader
npm install css-loader
npm install vue-template-compiler
И я добавил vue-loader в конфигурацию webpack:
var path = require('path')
module.exports = {
entry: './dev/app.js',
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'dist')
},
module: {
rules: [
{
test: /\.vue$/,
loader: 'vue-loader',
options: {
loaders: {
}
}
}
]
},
resolve: {
alias: {
'vue$': 'vue/dist/vue.esm.js'
}
}
};
Я создал hello.vue
<template>
<p>{{greeting}} World</p>
</template>
<script>
export default {
data:function(){
return {
greeting:"Hi there"
}
}
}
</script>
И в моем приложении я импортирую "привет",
import Vue from 'vue'
import hello from "./hello.vue";
new Vue({
el: '#app',
template:'<div><hello></hello></div>',
created: function () {
console.log("Hey, a vue app!")
}
})
Похоже, загрузчик не .vue
файлы .vue
, я получаю ошибку:
Module not found: Error: Can't resolve './hello.js'
РЕДАКТИРОВАТЬ
При попытке import hello from 'hello.vue'
я получаю ошибку:
Unknown custom element: <hello> - did you register the component correctly?
Я пропустил шаг? Я импортирую компонент.vue правильно? Как использовать компонент hello.vue из app.js?
Ответы
Ответ 1
Во-первых, вы не импортируете файл правильно. Вы должны импортировать его так:
import Hello from './hello.vue'
Во-вторых, после импорта компонента вам все равно нужно зарегистрировать его. Либо сделайте это глобально Vue.component('hello', Hello)
или в экземпляре Vue:
new Vue({
el: '#app',
template:'<div><hello></hello></div>',
components: { 'hello': Hello },
created: function () {
console.log("Hey, a vue app!")
}
})
В качестве побочного примечания, если вы хотите иметь возможность импортировать файл без указания расширения .vue
, вы можете указать, что расширение .vue
должно быть разрешено в вашем файле конфигурации.
В этом случае объект resolve
в вашем файле конфигурации должен выглядеть так:
resolve: {
alias: {
'vue$': 'vue/dist/vue.esm.js'
},
extensions: ['.js', '.vue', '.json']
}
Вот документация по resolve.extensions
.
Ответ 2
В дополнение к @thanksd ответ:
Начиная с vue-loader v15 требуется плагин:
// webpack.config.js
const VueLoaderPlugin = require('vue-loader/lib/plugin')
module.exports = {
module: {
rules: [
// ... other rules
{
test: /\.vue$/,
loader: 'vue-loader'
}
]
},
plugins: [
// make sure to include the plugin!
new VueLoaderPlugin()
]
}
https://vue-loader.vuejs.org/guide/
Ответ 3
Помечая дополнительную информацию здесь вместе с @lukebearden и @thanksd. Настройте приложение Vue с нуля, это основное, и я вырвал часть стиля по пути, потому что я не хотел иметь дело с ним: но он компилирует JS:
https://github.com/ed42311/gu-vue-app
Может подтвердить о плагине, и я не добавил решение, но теперь я буду :)
Дайте мне знать, если у вас есть мысли.