vueファイル(単一ファイルコンポーネント)をwebpackでビルド
.vue
ファイル(単一ファイルコンポーネント)をwebpack
でビルドする手順を紹介します。
バージョンは、Vue.js
は2.x
、webpack
は2.x
です。
わかりやすくするため、空のプロジェクトから出来る限り最小構成で作成していきます。(nodejs
とnpm
はインストール済みとします)
package.jsonの作成
最初にpackage.json
を作成します。いろいろと質問されますが、すべて何も入力せずに全てEnterキーをクリックしていけば問題ありません。
$ npm init
babelのインストール
babel
を使うと、ES2015 (ES6)などで書かれたソースコードを一般的なブラウザがサポートしているECMAScript5の形式に変換できます。
babel-core
babel-loader
babel-preset-es2015
babel-preset-stage-0
の4つのパッケージをインストールします。
$ npm install --save-dev babel-core babel-loader babel-preset-es2015 babel-preset-stage-0
設定ファイルの作成
.babelrc
という名前のファイルをプロジェクトのルートフォルダに作成します。
このファイルを作成しておけば、babel
を実行する時に自動でこの設定ファイルを読み込みます。
.babelrc
{
"presets": [["es2015", {"modules": false}], "stage-2"]
}
設定内容は必要に応じて書き換えてください。
必要なパッケージのインストール
以下のパッケージが必要になるのでインストールします。
- vue
- vue-loader
- vue-template-compiler
- webpack
- css-loader
$ npm install --save-dev vue vue-loader vue-template-compiler webpack css-loader
参考までに、この記事を執筆時点での各パッケージのバージョンは以下になります。
package.json
// 一部抜粋
"devDependencies": {
"babel-core": "^6.24.1",
"babel-loader": "^6.4.1",
"babel-preset-es2015": "^6.24.1",
"babel-preset-stage-0": "^6.24.1",
"css-loader": "^0.28.0",
"vue": "^2.2.6",
"vue-loader": "^11.3.4",
"vue-template-compiler": "^2.2.6",
"webpack": "^2.3.3"
}
特にVue.js
とwebpack
は1.x
と2.x
でコーディング方法が異なる場合があるので注意が必要です。
フォルダ構成
Laravel
のフォルダ構成に合わせて以下のようにします。
- node_modules
- public
- js
- resources
- assets
- js
- assets
- .babelrc
- package.json
resources/assets/js
フォルダにjs
やvue
を実装していきます。
public
フォルダが実際に公開するフォルダです。public/js
フォルダにビルドしたjs
ファイルが作成されます。
エントリポイント
最初にwebpack
で最初に読み込まれるファイルを作成します。
このファイルを起点にwebpack
の処理が行われるので、エントリポイントと呼ばれます。
js
フォルダにapp.js
ファイルを作成します。
app.js
import Vue from 'vue';
import App from './components/App.vue';
new Vue({
el: '#app',
render: h => h(App)
});
単一ファイルコンポーネント
次に.vue
ファイルを作成します。
先ほど作成したapp.js
でimport
しているApp.vue
を作成します。js
フォルダにcomponents
フォルダを作成し、その中にApp.vue
を作成します。
App.vue
<template>
<div class="message">
{{ message }}
</div>
</template>
<style scoped>
.message {
color: red;
}
</style>
<script>
export default {
data () {
return {
message: 'hello world'
};
}
};
</script>
webpackの設定ファイル
webpack
の設定ファイルを作成します。webpack.config.js
というファイル名でプロジェクトフォルダの直下(package.json
ファイルと同じ階層)に作成します。
webpack.config.js
const webpack = require('webpack');
module.exports = {
entry: './resources/assets/js/app.js',
output: {
path: __dirname + '/public',
publicPath: '/',
filename: 'js/app.js'
},
module: {
rules: [
{
test: /\.vue$/,
loader: 'vue-loader',
options: {
loaders: {
js: 'babel-loader'
}
}
},
{
test: /\.js$/,
loader: 'babel-loader',
exclude: /node_modules/
}
]
},
resolve: {
alias: {
'vue$': 'vue/dist/vue.common.js'
}
}
};
ここまでのフォルダ構成は以下になります。
- node_modules
- public
- js
- resources
- assets
- js
- components
- App.vue
- app.js
- components
- js
- assets
- .babelrc
- package.json
- webpack.config.json
ビルドコマンドの設定
package.json
ファイルのscripts
にwebpack
をビルドするコマンドを記載します。
package.json
// 一部抜粋 testはデフォルトで記載されていると思います。
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"webpack": "webpack"
},
実行
npm run webpack
を実行するとビルドが行われてpublic/js/app.js
のファイルが作成されます。
webpack-dev-serverで開発サーバーを起動するで、開発サーバー(localhost
)を起動して、ビルドしたファイルの動作確認を行います。