Webpkac 5の使い方
まずは空きフォルダを作ります
エントリーJSファイルを作ります
touch app.js
npmを初期化します
npm init
ライブラリをインストール
slugをインストールします
npm install slug
lodashとflickityをインストールします
npm install lodash flickity
jQueryとinsaneとjsonpとaxiosをインストールします
npm install jquery insane jsonp axios
インポート
app.jsに以下を記入します
import { uniq } from 'lodash';
import insane from 'insane';
import jsonp from jsonp;
index.htmlを作ります
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>JS Modules</title>
</head>
<body>
<script src="app.js"></script>
</body>
</html>
Webpack
webpackとwebpack-cliをインストールします
npm install webpack webpack-cli --save-dev
ES6をES5へCompileさせるので、babelをインストールします
npm install babel-loader @babel/core @babel/preset-env --save-dev
webpackの設定ファイルを作ります
touch webpack.config.js
webpack.config.js
まずはwebpackをインポートします
const webpack = require('webpack');
webpack.config.jsはnode.jsのファイルなので
現在のnodeバージョンはまだimport
をサポートしないのでrequire()
を使います
続いてnodeEnv
を定義します
const nodeEnv = process.env.NODE_ENV || 'production';
そしてmodule.exportsを定義します
module.exports = {
}
まずはdevtoolを定義します
module.exports = {
devtool: 'source-map',
}
そしてエントリーポイントを定義します
module.exports = {
...
entry: {
filename: './app.js',
},
}
アウトプットを定義します
module.exports = {
...
output: {
filename: 'bundle.js',
},
}
moduleを定義します
module.exports = {
...
modules: {
}
}
ES5→ES6のために、babelをインポートします
module.exports = {
...
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env'],
},
},
},
],
}
}
プラグインを定義します
module.exports = {
...
plugins: [
new webpack.DefinePlugin({
'proccess.env': { NODE_ENV: JSON.stringify(nodeEnv) },
}),
],
}
最適化JSを定義します
module.exports = {
optimization: {
minimize: true,
minimizer: [new TerserPlugin()],
},
}
実践
index.htmlに戻り、app.jsをdist/bundle.jsへ変更します
-<script type="module" src="app.js"></script>
+<script type="module" src="dist/bundle.js"></script>
app.jsに以下のコードを追加します
const ages = [1, 1, 4, 52, 12, 4];
console.log(uniq(ages));
ブラウザに行き、Console Panelで結果を確認しましょう
自分のJSを作る
まずはsrc
フォルダを作り、その中にconfig.js
を作成します
const apiKey = 'abc123';
const
はグローバル変数ではなく、Block Scoppedの変数です
すなわち、他のJSファイルをapiKey
をアクセスすることができません
他のJSファイツをapiKey
にアクセスするために、exportする必要があります
exportには二つのパターンがあります:Default ExportとNamed Export
Default Export
- importするとき、自由に名前を決められます
- moduleに応用される場合が多い
- 一つのmoduleファイル(JSファイル)には一回だけDefault Exportできます
export側は
const apiKey = 'abc123';
export default apiKey;
import側は
import apiKey from './src/config.js';
console.log(apiKey) // abc123
自由に名前を決めることができるので
こういうのもありです
import aloha from './src/config.js';
console.log(aloha) // abc123
Named Export
- importするとき、固定の名前を使わなければなりません
- method、variableに応用される場合が多い
- 一つのmoduleファイル(JSファイル)には無限にDefault Exportできます
export側は
export const apiKey = 'abc123';
import側は
import { apiKey } from './src/config.js';
console.log(apiKey) // abc123
import apiKey
はDefault Export用の記法で、
もしNamed Exportだったらimport { apiKey }
を書きましょう
別に間違ってもエラーにならないですが、ただwebpackがイエローになるだけです
Discussion