-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathwebpack.config.js
More file actions
85 lines (81 loc) · 3.11 KB
/
Copy pathwebpack.config.js
File metadata and controls
85 lines (81 loc) · 3.11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
// プラグインを利用するためにwebpackを読み込んでおく
const webpack = require('webpack');
// optimization.minimizerを上書きするために必要なプラグイン
const TerserPlugin = require('terser-webpack-plugin');
// output.pathに絶対パスを指定する必要があるため、pathモジュールを読み込んでおく
const path = require('path');
module.exports = (env, argv) => {
// argv.modeにはwebpackを実行したmodeが格納されている
// 例えば webpack --mode development と実行すれば
// argv.mode には 'development' が格納されている
// そのためdevelopmentモードで実行したかどうかを判定できる
const IS_DEVELOPMENT = argv.mode === 'development';
return {
// エントリーポイントの設定
entry: './src/js/app.js',
// 出力の設定
output: {
// 出力するファイル名
filename: 'bundle.js',
// 出力先のパス(絶対パスを指定する必要がある)
path: path.join(__dirname, 'public/js')
},
// ローダーの設定
module: {
rules: [
{
// ローダーの処理対象ファイル
test: /\.js$/,
// ローダーの処理対象から外すディレクトリ
exclude: /node_modules/,
use: [
{
// 利用するローダー
loader: 'babel-loader',
// ローダーのオプション
// 今回はbabel-loaderを利用しているため
// babelのオプションを指定しているという認識で問題ない
options: {
presets: [['@babel/preset-env', { modules: false }]]
}
}
]
},
{
// enforce: 'pre'を指定することによって
// enforce: 'pre'がついていないローダーより早く処理が実行される
// 今回はbabel-loaderで変換する前にコードを検証したいため、指定が必要
enforce: 'pre',
test: /\.js$/,
exclude: /node_modules/,
loader: 'eslint-loader'
}
]
},
// プラグインの設定
plugins: [
new webpack.ProvidePlugin({
$: 'jquery'
})
],
// developmentモードで有効になるdevtool: 'eval'を上書き
// developmentモードでビルドした時だけソースマップを出力する
devtool: IS_DEVELOPMENT ? 'source-map' : 'none',
// productionモードで有効になるoptimization.minimizerを上書きする
optimization: {
// developmentモードでビルドした場合
// minimizer: [] となるため、consoleは残されたファイルが出力される
// puroductionモードでビルドした場合
// minimizer: [ new TerserPlugin({... となるため、consoleを削除したファイルが出力される
minimizer: IS_DEVELOPMENT
? []
: [
new TerserPlugin({
terserOptions: {
compress: { drop_console: true }
}
})
]
}
};
};