File tree 16 files changed +222
-400
lines changed
16 files changed +222
-400
lines changed Original file line number Diff line number Diff line change 20
20
21
21
すでに webpack に精通している場合は、次の説明を省略してもかまいません。しかし、webpack を初めて使う人のために、ここで簡単な紹介を行います。
22
22
23
- [ webpack] ( http ://webpack.github.io/) とはモジュールのバンドラーです。それぞれのファイルをモジュールとして扱い、それらの間の依存関係を解決し、デプロイの準備が整った静的アセットにバンドルします。
23
+ [ webpack] ( https ://webpack.github.io/) とはモジュールのバンドラーです。それぞれのファイルをモジュールとして扱い、それらの間の依存関係を解決し、デプロイの準備が整った静的アセットにバンドルします。
24
24
25
- ![ webpack] ( http ://webpack.github.io/assets/what-is-webpack.png)
25
+ ![ webpack] ( https ://webpack.github.io/assets/what-is-webpack.png)
26
26
27
27
基本的な例として、CommonJS モジュールが多数あるとします。これらはブラウザで直接実行できません。なのでそれらを ` <script> ` タグを介して読み込むことのできる単一のファイルに "バンドル" する必要があります。webpack は ` require() ` での依存性解決と実行を行うことが出来ます。
28
28
Original file line number Diff line number Diff line change 18
18
- [ プロダクションビルド] ( workflow/production.md )
19
19
- [ リント] ( workflow/linting.md )
20
20
- [ テスト] ( workflow/testing.md )
21
- - [ モックを使用したテスト] ( workflow/testing-with-mocks.md )
22
21
- [ オプションリファレンス] ( options.md )
23
22
- [ loaders] ( options.md#loaders )
24
23
- [ preLoaders] ( options.md#preloaders )
25
24
- [ postLoaders] ( options.md#postloaders )
26
25
- [ postcss] ( options.md#postcss )
27
26
- [ postcss.config] ( options.md#postcssconfig )
27
+ - [ postcss.useConfigFile] ( options.md#postcssuseconfigfile )
28
+ - [ postcss.cascade] ( options.md#postcsscascade )
28
29
- [ cssSourceMap] ( options.md#csssourcemap )
29
30
- [ esModule] ( options.md#esmodule )
30
31
- [ preserveWhitespace] ( options.md#preservewhitespace )
33
34
- [ transformToRequire] ( options.md#transformtorequire )
34
35
- [ buble] ( options.md#buble )
35
36
- [ extractCSS] ( options.md#extractcss )
36
- - [ optimizeSSR] ( options.md#optimizessr )
37
+ - [ optimizeSSR] ( options.md#optimizessr )
Original file line number Diff line number Diff line change 10
10
11
11
> メモ: ` preLoaders ` と ` postLoaders ` は 10.3.0 以降でのみサポートされます
12
12
13
- ### webpack 2.x
14
-
15
13
``` js
16
14
module .exports = {
17
15
// 他のオプション
@@ -57,27 +55,4 @@ module.exports = {
57
55
}
58
56
```
59
57
60
- ### webpack 1.x
61
-
62
- ``` js
63
- // webpack.config.js
64
- module .exports = {
65
- // ほかのオプション
66
- module: {
67
- loaders: [
68
- {
69
- test: / \. vue$ / ,
70
- loader: ' vue'
71
- }
72
- ]
73
- },
74
- // `vue-loader` の設定
75
- vue: {
76
- loaders: {
77
- // 上記の設定と同じ
78
- }
79
- }
80
- }
81
- ```
82
-
83
58
高度な loader の設定のより実用的な使用方法は、[ CSS を単一のファイルに抽出する] ( ./expression-css.md ) にあります。
Original file line number Diff line number Diff line change 13
13
``` js
14
14
createElement (' img' , { attrs: { src: require (' ../image.png' ) }})
15
15
```
16
+
17
+ ### 変換ルール
18
+
19
+ - URL が絶対パス (例: ` ./images/foo.png ` ) の場合、そのままの状態で維持されます。
20
+
21
+ - URL が ` . ` による開始である場合、相対的なモジュール要求として解釈され、ファイルシステムのフォルダ構造に基いて解決されます。
22
+
23
+ - URL が ` ~ ` による開始である場合、モジュール要求として解釈された後、何もしません。これは、Node モジュール内部でアセットを参照することもできます:
24
+
25
+ ``` html
26
+ <img src =" ~some-npm-package/foo.png" >
27
+ ```
28
+
29
+ - (13.7.0以降) URL が ` @ ` による開始である場合、モジュール要求として解釈されます。これは、webpack 設定ファイルに ` @ ` のエイリアスがある場合は、便利です。デフォルトでは、` vue-cli ` によって作成されたプロジェクトでは ` ./src ` を指します。
30
+
31
+ ### 関連ローダー
32
+
16
33
もちろん ` .png ` ファイルは JavaScript のファイルではありません。[ file-loader] ( https://github.com/webpack/file-loader ) または [ url-loader] ( https://github.com/webpack/url-loader ) を使用して webpack を設定する必要があります。` vue-cli ` でスキャフォールドされたプロジェクトでは同じような設定がなされています。
17
34
35
+ ### なぜなのか
36
+
18
37
利点の全ては次の通りです:
19
38
20
39
1 . ` file-loader ` はアセットファイルのコピー先や配置先を制定したり、バージョンハッシュを利用してキャッシングを改善する方法を指定する事が出来ます。さらに、これは、単に** あなたの ` * .vue ` ファイルの隣にイメージを置くことができ、配備するURLを心配するのではなくフォルダ構造に基づいて相対パスを使用する** ことを意味します。
Original file line number Diff line number Diff line change @@ -41,7 +41,6 @@ comp-a h2 {
41
41
#### webpack.config.js
42
42
43
43
``` js
44
- // webpack 2.x
45
44
var ExtractTextPlugin = require (" extract-text-webpack-plugin" )
46
45
47
46
module .exports = {
Original file line number Diff line number Diff line change @@ -39,8 +39,6 @@ module.exports = {
39
39
40
40
すべての Vue コンポーネントで処理されたすべての CSS を 1 つの CSS ファイルに抽出する例:
41
41
42
- ### webpack 2.x
43
-
44
42
``` js
45
43
// webpack.config.js
46
44
var ExtractTextPlugin = require (" extract-text-webpack-plugin" )
@@ -68,36 +66,3 @@ module.exports = {
68
66
]
69
67
}
70
68
```
71
-
72
- ### webpack 1.x
73
-
74
- ``` bash
75
- npm install extract-text-webpack-plugin --save-dev
76
- ```
77
-
78
- ``` js
79
- // webpack.config.js
80
- var ExtractTextPlugin = require (" extract-text-webpack-plugin" )
81
-
82
- module .exports = {
83
- // 他の設定
84
- module: {
85
- loaders: [
86
- {
87
- test: / \. vue$ / ,
88
- loader: ' vue'
89
- },
90
- ]
91
- },
92
- vue: {
93
- loaders: {
94
- css: ExtractTextPlugin .extract (" css" ),
95
- // <style lang="less"> または他の言語も含めることができます
96
- less: ExtractTextPlugin .extract (" css!less" )
97
- }
98
- },
99
- plugins: [
100
- new ExtractTextPlugin (" style.css" )
101
- ]
102
- }
103
- ```
Original file line number Diff line number Diff line change @@ -89,17 +89,6 @@ CSS モジュールは [css-loader](https://github.com/webpack/css-loader) に
89
89
vue-loader の ` cssModules ` オプションを使って` css-loader ` に追加のクエリオプションを提供することができます:
90
90
91
91
``` js
92
- // webpack 1
93
- vue: {
94
- cssModules: {
95
- // ローカルID名を上書きする
96
- localIdentName: ' [path][name]---[local]---[hash:base64:5]' ,
97
- // キャメルケースを有効にする
98
- camelCase: true
99
- }
100
- }
101
-
102
- // webpack 2
103
92
module: {
104
93
rules: [
105
94
{
Original file line number Diff line number Diff line change 4
4
5
5
![ hot-reload] ( http://blog.evanyou.me/images/vue-hot.gif )
6
6
7
+ ## 状態維持ルール
8
+
9
+ - コンポーネントの ` <template> ` を編集するとき、編集されたコンポーネントのインスタンスは、そのまま再描画し、全て現在のプライベートな状態に維持します。これは、テンプレートが副作用を発生させない新しい描画関数にコンパイルされるため可能です。
10
+
11
+ - コンポーネントの ` <script> ` 部分を編集するとき、編集されたコンポーネントのインスタンスは破棄され、そのまま再作成されます。(アプリケーション内の他のコンポーネントの状態は維持されています。) これは、` <script> ` が副作用を生むかもしれないライフサイクルフックを含むことができるため、一貫性のある動作を保証するためには再描画の代わりに"リロード"が必要です。これはまた、コンポーネントライフサイクルフック内のタイマーのようなグローバルな副作用に注意する必要があることを意味します。場合によっては、コンポーネントでグローバルな副作用が発生する場合は、フルページリロードの必要があるかもしれません。
12
+
13
+ - ` <style> ` ホットリロードは ` vue-style-loader ` を介して単独で動作するため、アプリケーションの状態に影響しません。
14
+
15
+ ## Usage
16
+
7
17
` vue-cli ` を使ってプロジェクトをスキャホールドすると、ホットリロードはすぐに使えるようになります。
18
+
19
+ プロジェクトを手動で設定するときは、ホットリロードは、` webpack-dev-server --hot ` によってプロジェクトを提供するとき、自動的に有効なります。
20
+
21
+ 上級者は、` vue-loader ` によって内部的に使用されいてる [ vue-hot-reload-api] ( https://github.com/vuejs/vue-hot-reload-api ) を確認することができます。
22
+
23
+ ## ホットリロードの無効
24
+
25
+ ホットリロードは以下の状況を除いて常に有効です:
26
+
27
+ * webpack の ` target ` が ` node ` (SSR)
28
+ * webpack ミニファイコード
29
+ * ` process.env.NODE_ENV === 'production' `
30
+
31
+ ホットリロードを明示的に無効にするためには、` hotReload: false ` オプションを使用してください:
32
+
33
+ ``` js
34
+ module: {
35
+ rules: [
36
+ {
37
+ test: / \. vue$ / ,
38
+ loader: ' vue-loader' ,
39
+ options: {
40
+ hotReload: false // ホットリロードを無効
41
+ }
42
+ }
43
+ ]
44
+ }
45
+ ```
Original file line number Diff line number Diff line change 4
4
5
5
## 設定ファイルの使用
6
6
7
- バージョン 11.0 以降、 ` vue-loader ` は [ ` postcss-loader ` ] ( https://github.com/postcss/postcss-loader#usage ) でサポートされているものと同じ PostCss の設定ファイルのオートロードをサポートします:
7
+ ` vue-loader ` は [ ` postcss-loader ` ] ( https://github.com/postcss/postcss-loader#usage ) でサポートされているものと同じ PostCss の設定ファイルのオートロードをサポートします:
8
8
9
9
- ` postcss.config.js `
10
10
- ` .postcssrc `
11
11
- ` package.json ` 内の ` postcss `
12
12
13
13
設定ファイルを使用すると ` postcss-loader ` で処理された通常の CSS ファイルと ` *.vue ` ファイル内の CSS で同じ設定を共有することができます。
14
14
15
- ## インラインオプション
15
+ ## ` postcss-loader ` の使用
16
16
17
- あるいは、 ` vue-loader ` の ` postcss ` オプションを使用して ` *.vue ` ファイル用の PostCSS の設定を指定することが出来ます 。
17
+ ` vue-loader ` は内部的にはスタイルで PostCSS を扱うため、スタンドアロンの CSS ファイルに ` postcss-loader ` を適用する必要あります。プロジェクトに PostCSS 設定ファイルがある場合は、style ブロックに ` lang="postcss" ` を指定する必要はありません 。
18
18
19
- webpack 1.x の例 :
19
+ 時々、ユーザーはシンタックスハイライトを目的のみに ` lang="postcss" ` を使用することもあります。13.6.0 から、以下の一般的な PostCSS 拡張 ( ` vue-loader ` 自身の ` loaders ` オプションを介して)のためにローダーが明示的に指定されていない場合は、それらは ` vue-loader ` のデフォルト PostCSS 変換を単に追加します :
20
20
21
- ``` js
22
- // webpack.config.js
23
- module .exports = {
24
- // 他の設定
25
- vue: {
26
- // カスタムされた PostCSS プラグインを使用します
27
- postcss: [require (' postcss-cssnext' )()]
28
- }
29
- }
30
- ```
21
+ - ` postcss `
22
+ - ` pcss `
23
+ - ` sugarss `
24
+ - ` sss `
25
+
26
+ ## インラインオプション
27
+
28
+ あるいは、 ` vue-loader ` の ` postcss ` オプションを使用して ` *.vue ` ファイル用の PostCSS の設定を指定することが出来ます。
31
29
32
- webpack 2.x の例 :
30
+ 例 :
33
31
34
32
``` js
35
33
// webpack.config.js
@@ -61,7 +59,21 @@ module.exports = {
61
59
postcss: {
62
60
plugins: [... ], // プラグインのリスト
63
61
options: {
64
- parser: sugarss // sugarss パーサーを使用します
62
+ parser: ' sugarss' // sugarss パーサーを使用します
65
63
}
66
64
}
67
65
```
66
+
67
+ ### 自動設定ファイルの読み込みを無効にする
68
+
69
+ ` 13.6.0 以降 ` では、` postcss.useConfigFile: false ` を指定することによって自動 postcss 設定ファイルの読み込みが無効化されます:
70
+
71
+ ``` js
72
+ postcss: {
73
+ useConfigFile: false ,
74
+ plugins: [/* ... */ ],
75
+ options: {/* ... */ }
76
+ }
77
+ ```
78
+
79
+ これにより ` *.vue ` ファイル内の postcss 設定をインライン設定で完全に制御することができます。
Original file line number Diff line number Diff line change 1
1
# スコープ付き CSS
2
2
3
+ ** 再帰されたコンポーネントの子孫セレクタには気をつけてください!** セレクタ ` .a .b ` を持つ CSS ルールの場合、` .a ` にマッチする要素に再帰的な子コンポーネントが含まれている場合、その子コンポーネントのすべての ` .b ` はルールにマッチします。# スコープ付き CSS
4
+
3
5
` scoped ` 属性をもつ ` <style> ` タグを利用するとき、その CSS は現在のコンポーネントの要素にのみ適用されます。これは Shadow DOM のスタイルのカプセル化に似ています。いくつか注意点がありますが、polyfill は必要ありません。PostCSS を使用して以下を変換することによって実現しています:
4
6
5
7
``` html
28
30
</template >
29
31
```
30
32
31
- #### 注意
33
+ ## 秘訣
34
+
35
+ ### ローカルスタイルとグローバルスタイルの混在
36
+
37
+ 同じコンポーネントでスコープ付き、そして非スコープ付きスタイル両方を含むことができます:
38
+
39
+ ``` html
40
+ <style >
41
+ /* グローバルスタイル */
42
+ </style >
32
43
33
- 1 . 同じコンポーネント内にスコープで区切られてものとそうでないスタイルを含むことが出来ます:
44
+ <style scoped >
45
+ /* ローカルスタイル */
46
+ </style >
47
+ ```
34
48
35
- ``` html
36
- <style >
37
- /* グローバルスタイル */
38
- </style >
49
+ ### 子コンポーネントのルート要素
39
50
40
- <style scoped >
41
- /* ローカルスタイル */
42
- </style >
43
- ```
51
+ ` scoped ` によって、親コンポーネントのスタイルは子コンポーネントに漏れません。ただし、子コンポーネントのルートノードは親スコープの CSS と子スコープの CSS と両方によって影響を受けます。これは、設計上、親はレイアウトが目的で子のルート要素をスタイルすることができます。
44
52
45
- 2 . 子コンポーネントのルートノードは親のスコープの CSS と子のスコープの CSS の両方の影響をうけます。
53
+ ### ディープセレクタ
54
+
55
+ ` scoped ` スタイルのセレクタを "deep" にしたい、つまり子コンポーネントに及ぼしたい場合は、` >>> ` コンビネータを使用することができます:
56
+
57
+ ``` html
58
+ <style scoped >
59
+ .a >>> .b { /* ... */ }
60
+ </style >
61
+ ```
62
+
63
+ 上記は以下にコンパイルされます:
64
+
65
+ ``` css
66
+ .a [data-v-f3f3eg9 ] .b { /* ... */ }
67
+ ```
46
68
47
- 3 . パーシャルはスコープ付きスタイルの影響をうけません 。
69
+ SASS のようないくつかのプリプロセッサは、 ` >>> ` を適切に解析できないかもしれません。そのようなケースでは ` /deep/ ` コンビネータを代わりに使用することができます。それは、 ` >>> ` のエイリアスで、全く同じような動作します 。
48
70
49
- 4 . ** スコープされたスタイルは class の必要性を排除しません ** 。ブラウザが様々な CSS セレクタをレンダリングするため、 ` p { color: red } ` はスコープされているとき何倍も遅くなります(すなわち属性セレクタと組み合わせた場合)。もし ` .example { color: red } ` のように class か id を使用するなら、パフォーマンスヒットは事実上なくなります。 [ この例 ] ( http://stevesouders.com/efws/css-selectors/csscreate.php ) で違いをテストすることが出来ます。
71
+ ### 動的に生成されるコンテンツ
50
72
51
- 5 . ** 再帰されたコンポーネントの子孫セレクタには気をつけてください! ** セレクタ ` .a .b ` を持つ CSS ルールの場合、 ` .a ` にマッチする要素に再帰的な子コンポーネントが含まれている場合、その子コンポーネントのすべての ` .b ` はルールにマッチします 。
73
+ ` v-html ` によって作成された DOM コンテンツは、スコープ付きスタイルにの影響を受けませんが、ディープセレクタを使用してスタイルを設定することはできます 。
52
74
53
- 6 . ` scoped ` スタイルで入れ子のセレクタが必要なら、CSS に対して ` >>> ` オペレータを、そして ` scss ` に対しては ` /deep/ ` を使用する必要があります:
75
+ ### 留意すること
54
76
55
- ``` html
56
- <style scoped >
57
- .a >>> .b {
58
-
59
- }
60
- </style >
61
-
62
- <style lang =" scss" scoped >
63
- .a /deep/ .b {
64
-
65
- }
66
- </style >
67
- ```
77
+ - ** スコープ付きスタイルでは class は必要です。** ブラウザが様々な CSS セレクタを描画するため、` p { color: red } ` はスコープされているとき何倍も遅くなります(すなわち属性セレクタと組み合わせた場合)。もし ` .example { color: red } ` のように class か id を使用するなら、パフォーマンスヒットは事実上なくなります。[ この例] ( https://stevesouders.com/efws/css-selectors/csscreate.php ) で違いをテストすることが出来ます。
78
+ - ** 再帰されたコンポーネントの子孫セレクタには気をつけてください!** セレクタ ` .a .b ` を持つ CSS ルールの場合、` .a ` にマッチする要素に再帰的な子コンポーネントが含まれている場合、その子コンポーネントのすべての ` .b ` はルールにマッチします。
You can’t perform that action at this time.
0 commit comments