「Framework7(webpack)でアプリ作り始めたけど、index.html以外のアプリhtmlも同時にビルドしたいけどどうすればいい?」
こんにちは、タカフです。
Framework7やwebpack等のフロントエンドのビルドシステムを使っていると複数htmlファイルをビルドしたい事、ありますよね。
最適な方法がありますので、備忘録としても記事にしておきたいと思います。
結論:webpack.config.jsで複数htmlファイルをビルド出来るようにする
結論としてはwebpack.config.js
の記述方法で複数htmlファイルをビルド出来るようにします。
下記コードはFramework7で生成されるwebpack.config.jsの大事な部分を抜粋しての説明となります。
今回の例はアプリ用のindex.htmlの他に管理画面用アプリのadmin.htmlを作ろうとするようなケースです。
module.exports = {
entry: {
app: './src/js/app.js',
admin: './src/admin.js',
},
output: {
path: resolvePath('www'),
filename: './js/[name].js',
publicPath: '',
},
plugins: [
new HtmlWebpackPlugin({
filename: './index.html',
template: './src/index.html',
inject: true,
chunks: ['app'],
minify: env === 'production' ? {
collapseWhitespace: true,
removeComments: true,
removeRedundantAttributes: false,
removeScriptTypeAttributes: true,
removeStyleLinkTypeAttributes: true,
useShortDoctype: true
} : false,
}),
new HtmlWebpackPlugin({
filename: './admin.html',
template: './src/admin.html',
inject: true,
chunks: ['admin'],
minify: env === 'production' ? {
collapseWhitespace: true,
removeComments: true,
removeRedundantAttributes: false,
removeScriptTypeAttributes: true,
removeStyleLinkTypeAttributes: true,
useShortDoctype: true
} : false,
}),
new MiniCssExtractPlugin({
filename: 'css/[name].css',
}),
]
}
大事なポイントとしては、
entry
にてビルドしたいjsの数だけ連想配列でキーとソースとなるjsファイルパスを列挙するoutput
にてfilename
に[name].js
と記述すると1.で定義したキーでjsファイルが出力されるMiniCssExtractPlugin
にてfilename
に[name].css
と記述すると1.で定義したキーでcssファイルが出力されるHtmlWebpackPlugin
のオプションでchunks
に1.で定義したキーを記述しておくとその2.3.出力したjs/cssファイルがinjectにより挿入される
となります。
おまけ:管理画面(admin.html)の開発を始めたい時
Framework7では npm run dev
コマンドでindex.htmlページが開かれて開発を始めることが出来ますが、
今回のように別のhtmlファイルを定義してその開発を始めたい時はコマンドに以下のようなオプションを付けることで開始出来ます。
$ npm run dev -- --open-page admin.html
これは npm run コマンドに引数を渡す方法を使って、最初に開くページ(–open-page)を指定しています。
現場からは以上です。