Vue-loader 是什么?
vue-loader 是一個加載器,能把如下格式的 Vue 組件轉化成JavaScript模塊。

vue-loader 提供了一些非常酷炫的特性:
簡單來說,webpack 和 vue-loader 的組合為你創作Vue應用的一個更先進、更靈巧的極其強大的前端開發模式。
Webpack 是什么?
如果你熟悉 Webpack 那就跳過這部分吧,但對于那些新手們,請看下這個簡單介紹吧:
Webpack 是一個模塊打包工具。在開發中,它把一堆文件中每個都作為一個模塊處理,找出它們間的依賴關系,并打包成待發布的靜態資源。

列舉一個基本例子,設想我們有一堆的 CommonJS 的引用。它們是不能在瀏覽器直接運行,所以需要把它們 捆綁 成 <script> 標記內的單一文件。Webpack 就能按照 require() 調用的依賴關系為我們做到這點。
實際上,Webpack 能做的更多,通過 "loaders" 我們能讓 Webpack 按照我們想要的任何方式打包輸出。例如:
Vue 組件規格
*.vue 文件是用戶用 HTML-like 的語法編寫的 Vue 組件。每個 *.vue 文件都包括三部分 <template>, <script> 和 <style>:
<template> <div class="example">{{ msg }}</div></template><script>export default { data () { return { msg: 'Hello world!' } }}</script><style>.example { color: red;}</style>vue-loader 解析文件,提取每個語言塊,讓他們通過需要的其他 loaders ,最后組裝起來,放回 CommonJS 的模塊,此模塊的 module.exports 就是個 Vue.js 組件對象。
vue-loader 默認用沒有用語言編譯器,想CSS 預編譯和HTML模板編譯語言等,如果想用這些功能,需要設置 lang 屬性的來實現。例如,你可以在組件的樣式中這樣用 SASS :
<style lang="sass"> /* 編寫 SASS! */</style>
更多細節查看 [使用預編譯器]。
語言塊
<template>
<script>
<style>
Src Imports
如果你喜歡把你的 *.vue 組件拆分成多個文件,那么你可以用 src 屬性導入外部文件,代碼如下:
<template src="./template.html"></template><style src="./style.css"></style><script src="./script.js"></script>
需要注意的是 src 導入要遵循和 CommonJS 的 require() 調用一樣的路徑解析規則,這就是說你需要用以 ./ 開頭的相對路徑,并且你可以直接從已安裝的 NPM 包內導入資源,例如:
<!-- 從已安裝的 "todomvc-app-css" NPM 包內導入文件 --><style src="todomvc-app-css/index.css">
語法高亮顯示
開發中的第一件事,你可能想讓 *.vue 組件能高亮顯示。現階段,在 Sublime Text , Atom , Vim , Visual Studio Code , Brackets ,和 JetBrains products (WebStorm,PhpStorm,等)都有支持語法高亮顯示的插件。如果在 Vue 組件內沒有使用任何預編譯器,那么編輯器就把 *.vue 文件當成普通的 HTML 文件一樣。
注釋
在每個代碼塊內,注釋的時候,需要使用各自語言的注釋語法去注釋(HTML、CSS、JavaScript、Jade 等)。在文件最頂部注釋的時候用HTML的注釋語法:<!― 在這里寫注釋的內容 --> 。
項目設置
語法高亮
開發中的第一件事,你可能想讓 *.vue 組件能高亮顯示。現階段,在 Sublime Text , Atom , Vim , Visual Studio Code , Brackets ,和 JetBrains products (WebStorm,PhpStorm,等)都有支持語法高亮顯示的插件。如果在 Vue 組件內沒有使用任何預編譯器,那么編輯器就把 *.vue 文件當成普通的 HTML 文件一樣。
使用 vue-cli
創建項目的時候推薦使用腳手架工具,可以用 vue-loader 和 vue-cli,命令行如下:
npm install -g vue-clivue init webpack-simple hello-vuecd hello-vuenpm installnpm run dev # 一切就緒!
ES2015
當 vue-loader 檢測到 babel-loader 或者 buble-loader 在項目中存在的時候,將會用它們去處理所有 *.vue 文件的 <script> 部分,所以我們就可以在 Vue 組件中用 ES2015 。 如果你還不熟悉這個新語言的話,最好去學一下:
這里是一個引用其他 Vue 組件的典型模式,
<script>import ComponentA from './ComponentA.vue'import ComponentB from './ComponentB.vue'export default { components: { ComponentA, ComponentB }}</script>在這里用的就是 ES2015 精簡的語法定義個子組件。{ ComponentA } 是指 { ComponentA: ComponentA } 。Vue會被自動轉為 component-a, 所以你就能在模板中引入組件 <component-a> 。
轉譯正常的 .js 文件
由于 vue-loader 只能處理 *.vue 文件,你需要在配置文件中告訴 Webpack 用 babel-loader 或者 buble-loader 。這點,可以用項目腳手架工具 vue-cli 。
用 .babelrc 文件來配置 Babel
.babelrc 可以控制 babel-loader ,并推薦這種方式來配置 Babel 預設插件。
Scoped CSS
當 <style> 標簽有 scoped 屬性的時候,它的 CSS 就只能作用于當前的組件。這就像樣式被封裝在 Shadow DOM 內。這是用 PostCSS 轉譯實現的。如下:
<style scoped>.example { color: red;}</style><template> <div class="example">hi</div></template>轉換成:
<style>.example[_v-f3f3eg9] { color: red;}</style><template> <div class="example" _v-f3f3eg9>hi</div></template>注意
在同一組件內,你能同時用有作用域和無作用域的樣式:
<style> /* global styles */</style><style scoped> /* local styles */</style>
PostCSS
任何通過 vue-loader 處理過的 CSS 都再用 PostCSS重寫有作用域限制的 CSS 部分。你也能添加自定義的 PostCSS 插件處理,例如, autoprefixer 或 CSSNext。
在 Webpack 1.x 中的用法如下:
// webpack.config.jsmodule.exports = { // 其他配置... vue: { // 使用用戶自定義的 postcss 插件 postcss: [require('postcss-cssnext')()] }}Webpack 2.x 中的用法:
// webpack.config.jsmodule.exports = { // 其他配置... plugins: [ new webpack.LoaderOptionsPlugin({ vue: { // 使用用戶自定義插件 postcss: [require('postcss-cssnext')()] } }) ]}除了接受插件的數組,postcss 選項也接受:
postcss: { plugins: [...], // list of plugins options: { parser: sugarss // use sugarss parser } }熱加載
“熱加載” 不只是當你修改了文件簡單地重新加載下頁面。當啟用了熱加載功能,編寫完 *.vue 文件后,組件的所有的實例對象被替換,而頁面并沒有重新加載。仍然保持應用原有的狀態。這在你調整模板或修改組件樣式的時候,大大改善了開發體驗。
當使用項目的腳手架工具 vue-cli ,熱加載自動啟用。
總結
好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對武林網的支持。
新聞熱點
疑難解答