vue-loader - Vue.js

初学者のメモ書きなので注意。

vue-loader

Vue.jsの単一ファイルコンポーネントをよしなにしてくれるツール。(超曖昧な理解)

単一ファイルコンポーネントとはつまり拡張子.vueで、<template>, <script>, <style>を1ファイルに書いたもの。これを他のコンポーネントから読み込んだり読み込まれたりして、機能毎にファイルを分けて開発できる。

当然、そのままではブラウザは解釈できないので、解釈できるhtml, css, jsにコンパイルする必要がある。

そのコンパイルにはwebpackがよく使われていてる。webpackはさらに裏で言語毎に様々なツールやプラグインを使ってまとめ上げているので、設定が多岐に渡り、把握が難しい。

vue-loaderは、そんなwebpackとvueの架け橋的な存在をするwebpack上のプラグイン。vueの構造に特化して、webpackでのコンパイル設定をいい感じに渡してくれる。

Vue.jsを動かすだけなら、初期設定がだいたい出来ているのでいじる必要は無い。

loader設定ファイル場所

PhpStormでプロジェクトを作成したときのフォルダ構造では、./build/vue-loader.conf.js で記述されている。

さらに、css-loader などは分離して ./build/utils.js で記述されている。

この辺のファイルはいじっていいものかどうか(後から更新で上書きされたりしないか)よくわからないが、チュートリアルで util.js を変更してる例が出てきているので、多分いいんだろう。

ケース

scssを使う

npm で、scss用のモジュールを入れていなければ入れる。scssという名前でも使うモジュールはsass。

> npm i -D node-sass sass-loader

後は、基本的な設定は utils.js で済んでいるので、.vueファイルに以下のように書くと使える

<style lang="scss">
#header {
  color: #fff;
  &:hover {
    color: #aaa;
  }
}
</style>

scssの共通のmixinや変数をどこでも使えるようにする

全体でグローバルな変数値や、便利関数をmixinとしてどこからでも使いたい場合。

適当にたとえば ./src/assets/scss/global.scss あたりにグローバル定義用ファイルを作り、中で変数などを記述する。

$theme-color: #ff0;  // 共通のテーマカラーを指定

これを読み込むためには、とりあえずは、各.vueファイルの<style>の先頭でimportすればよい。

<template>...</template>
<script>...</script>

<style lang="scss">
@import url("../assets/scss/global.scss")

#app {
  background-color: $theme-color;
}
</style>

が、これではいちいち面倒だし、ファイル名直書きで保守性も低下する。これをloaderの設定で、何も書かずとも常に読み込むように出来る。

exports.cssLoaders = function (options) {
  // ...
  return {
    css: generateLoaders(),
    // ...
    scss: generateLoaders('sass', {  // 以下のオプションを追記
      data: '@import global.scss'
      includePaths: [path.resolve(__dirname, '../src/assets/sass/')],
    }),
// ...
}

<template>...</template>
<script>...</script>

<style lang="scss">
#app {
  background-color: $theme-color;
}
</style>

このウェブサイトはクッキーを使用しています。 Webサイトを使用することで、あなたはあなたのコンピュータにクッキーを保存することに同意します。 また、あなたはあなたが私たちのプライバシーポリシーを読んで理解したことを認めます。 同意しない場合はウェブサイトを離れてください。クッキーに関する詳細情報
programming/web_development/javascript/vuejs/loader.txt · 最終更新: 2018/12/10 by ikatakos
CC Attribution 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0