More than 3 years have passed since last update.
webpack 4 å ¥é
ãç¥ããïŒ2020/08/25 远èšïŒ
Udemy ã§ãwebpack æéå ¥éïŒ -> 2,000 åïŒãšããè¬åº§ãå ¬éããŸããã
æ¬æ¥ã®äŸ¡æ Œã¯10,800åã§ãããäžèšãªã³ã¯ããã¢ã¯ã»ã¹ãããš2,400åã§è³Œå ¥ã§ããŸãã
ã©ããªå 容ïŒ
webpack ãå©çšããããã³ããšã³ãéçºç°å¢ãæ§ç¯ã§ããããã«ãªãããã³ãºãªã³åœ¢åŒã®è¬åº§ã§ãã
詳现ã¯äžèšã®ãªã³ã¯ã®ãã¬ãã¥ãŒåç»ã§è©³ãã説æããŠããŸãã
èšäºãšã®å 容ã®éã
èšäºã®å 容ã«ã以äžã®å 容ãç¹åŸŽã远å ãããæãã§ãã
- å®åã§å©çšã§ããéçºç°å¢ãåŸã ã«æ§ç¯ããŠããã®ã§ãèšäºãšæ¯ã¹ãŠå®è·µçãªå 容
- ãã³ãºãªã³åœ¢åŒã®è¬åº§ãªã®ã§ãæãåãããªãã webpack ãåŠç¿ã§ãã
- webpack ã®èšå®ãã¡ã€ã«ã«è¿œå ããå€ã®è©³çްããã¹ãŠè§£èª¬
-
èšäºã§ã¯è§£èª¬ããŠããªã现ããè£è¶³ããæ©èœã®ã玹ä»
- ãªã npm scripts ãå©çšããã®ã
- package.json ã® devDependenciesãdependencies ã®éãã«é¢ããŠ
- webpack-merge ã§éçºçšãšæ¬çªçšã®èšå®ãåããæ¹æ³
- webpack ã®ã¢ãŒãã«é¢ããŠè£è¶³
- ãœãŒã¹ããããçæããæ¹æ³ããœãŒã¹ãããã«é¢ããŠè£è¶³
- clean-webpack-plugin ã§åºåå ãã¯ãªãŒã³ã¢ããããæ¹æ³
- html-webpack-plugin ã®å©ç𿹿³
- è€æ°ã®ãšã³ããªãŒãã€ã³ããããã³ãã«ãåºåããæ¹æ³
- æé©åãããããã«å©çšãã SplitChunksPlugin ã®å¿çšçãªäœ¿ãæ¹
- ãã©ãŠã¶ãã£ãã·ã¥å¯Ÿç
- JavaScript ã®ä»æ§ããBabel ã®æŠèŠããªã Babel ãå©çšããã®ãã«é¢ããŠ
- babel-loader ã§ ES2015 以éã®æ§æã§æžãããã³ãŒããæå®ãããã©ãŠã¶ã§åäœããã³ãŒãã«å€æããæ¹æ³
- babel-loader ã§ æå®ãããã©ãŠã¶ã§å¿ èŠãªããªãã£ã«ã®ã¿ãåãèŸŒãæ¹æ³
- eslint-loader + Prettier ã§ã³ãŒããæ€èšŒãæŽåœ¢ããæ¹æ³
- eslint-loader ã®äœ¿ãã©ããã«é¢ããŠ
- mini-css-extract-plugin ã®å©ç𿹿³
- production ã¢ãŒãæã® sass-loader ã®æåã«é¢ããŠ
- PostCSS ã®ç°¡åãªèª¬æ
- post-css-loader ã§ãã³ããŒãã¬ãã£ãã¯ã¹ãèªåã§è¿œå ããæ¹æ³
- optimize-css-assets-webpack-plugin ã§æé©åãã CSS ãåºåããæ¹æ³
- html-loader ã§ HTML äžã®ç»åã file-loader ã§æ±ããããã«ããæ¹æ³
- html-webpack-plugin ãš html-loader ã䜵çšããæã®æåã«é¢ããŠ
- image-webpack-loader ã§ç»åãå§çž®ããæ¹æ³
- è¬åº§ã®ã¬ã¯ãã£ãŒæ¯ã«ãµã³ãã«ã³ãŒããæäŸããã¹ãŠããŠã³ããŒãã§ãã
ã©ããªäººãè³Œå ¥ãããšåœ¹ã«ç«ã€ïŒ
- ãã³ãºãªã³åœ¢åŒã§ webpack ãåŠç¿ãããæ¹
- è¬åº§ã®ãµã³ãã«ã³ãŒãïŒhttps://github.com/hira777/udemy-practical-webpackïŒã®å 容ãããããªãæ¹
ã©ããªäººãè³Œå ¥ããŠã圹ã«ç«ããªãïŒ
- æ¢ã« webpack ãããçšåºŠäœ¿ãããªããŠããæ¹
- è¬åº§ã®ãµã³ãã«ã³ãŒãïŒhttps://github.com/hira777/udemy-practical-webpackïŒã®å 容ããããæ¹
åè¿°ã®éããwebpack ã®åºç€ãçè§£ããŠãããããçšåºŠäœ¿ãããªããŠããæ¹ã«ã¯ç©è¶³ããªãå 容ã§ãã
ãã®ããããŸãã¯è¬åº§ã§å©çšããŠãããµã³ãã«ã³ãŒããããã¬ãã¥ãŒåç»ãã芧ããã ãããã°ãšæããŸãã
èå³ãæã£ãŠãã ãã£ãæ¹ã¯ãè³Œå ¥ããã ãããšå€§å€å¬ããã§ãã
ãããããé¡ãããããŸãã
ã¯ããã«
webpackã«é¢ããŠèª¬æããæ©äŒããã£ãããããããã«é¢ããŠãŸãšããŸããã
- ãgulpã¯äœ¿ã£ãŠããã©webpackã¯ã¡ãã£ãš...ã
- ãwebpack.config.jsã®äžèº«ãèŠãŠã¿ãããäœãæžããŠããã®ãçè§£ã§ããªããŠè«Šããã
- ãäœã䟿å©ãªã®ãããããããªãã
- ãå¥ã«webpack䜿ããªããŠãå®è£ ã¯ã§ããããå¿ èŠãªããªãïŒã
ãšãã£ã人éåãã«æžããèšäºã§ããã
- webpackã«é¢ããŠã®åºæ¬æ å ±ãå©çšçšéãæ©èœãçè§£ããã
- ããããã¢ãžã¥ãŒã«ãã³ãã©ãšã¯äœãããªãã¢ãžã¥ãŒã«ãã³ãã©ãå©çšããã®ããçè§£ããã
ããšãç®çãšããŠããŸãã
解説ã«å©çšããŠããã³ãŒãã®æçµåœ¢æ ã¯GitHubäžã«ãããŸãã
webpackã®ããŒãžã§ã³1ç³»ãš3ç³»ã®è§£èª¬ãã³ãŒãã¯ä»¥äžã«ç§»åããŸããã®ã§ãå¿ èŠã§ããã°ãåç §ãã ããã
æ¬èšäºã®åæã泚æç¹
- webpackã®ããŒãžã§ã³ã¯4ç³»ïŒwebpack 4ïŒã察象ã«ããŠããŸãã
- gulpãè§Šã£ãããšããã人åãã®èšäºãªã®ã§
npm installãªã©npmã«é¢ãã説æã¯çããŸãã - webpackãšã¢ãžã¥ãŒã«ãã³ãã©ã«é¢ããŠã®èšäºãªã®ã§gulpã§webpackãå©çšããæ¹æ³ã¯èšèŒããŠããªãã§ãã
- webpackã¯ç»åãCSSãªã©ãã¢ãžã¥ãŒã«ã«ããŠãŸãšããããšãã§ããŸãããä»åã¯JavaScriptã«çŠç¹ãåœãŠã説æãããŠããŸãã
webpackãšã¯
ã¢ãžã¥ãŒã«ãã³ãã©ã®ããšã
ã¢ãžã¥ãŒã«ãã³ãã©ãšã¯
è€æ°ã®ã¢ãžã¥ãŒã«ã1ã€ã«ãŸãšãããã¡ã€ã«ãåºåããããŒã«ã®ããšïŒç°¡æœã«èšã£ãŠããŸãã°ïŒã
â»åºåèšå®ã«ãã£ãŠã¯è€æ°ã®ãã¡ã€ã«ãåºåããããšããããŸãã
webpack以å€ã«ã以äžã®ãããªã¢ãžã¥ãŒã«ãã³ãã©ãååšããã
- Browserify
- RequireJS
webpackïŒã¢ãžã¥ãŒã«ãã³ãã©ïŒé¢é£ã®èšäºã§ããå©çšãããŠããçšèª
ã¢ãžã¥ãŒã«
æ©èœããšã«åå²ããããã¡ã€ã«ã®ããšã
ãã®ãããwebpackã¯ãè€æ°ã®ãã¡ã€ã«ããŸãšãããã¡ã€ã«ããåºåããããŒã«ãšèªèããŠããã°ãšããããã¯åé¡ãªãã
ãã³ãã«
ãŸãšãããããã¡ã€ã«ã®ããšããã³ãã«ãã¡ã€ã«ãšãèšãã
ãã®ããã以äžã®èšèã®æå³ã¯å€§äœåãã
- ããã³ãã«ã倧ããã = ããŸãšãããããã¡ã€ã«ã®ãµã€ãºã倧ããã
- ããã³ãã«ãçæããã = ããŸãšãããããã¡ã€ã«ãçæããã
ãã³ãã«ãã
ããŸãšããããšããæå³ã§äœ¿ãããŠããããšãå€ãã
ãã®ããã以äžã®èšèã®æå³ã¯å€§äœåãã
- ãã¢ãžã¥ãŒã«ããŸãšããã = ãã¢ãžã¥ãŒã«ããã³ãã«ããã
ãã«ã
webpackã«ãããŠã®ããã«ããã¯ããã³ãã«ãåºåãããŸã§ã®äžé£ã®åŠçããšããæå³ã§äœ¿ãããŠããããšãå€ãïŒæ°ãããïŒã
ãã®ããã以äžã®èšèã®æå³ã¯å€§äœåãã
- ããã«ãããã = ããã³ãã«ãåºåãããŸã§ã®äžé£ã®åŠçãå®è¡ããã
- ããã«ããé ãã = ããã³ãã«ãåºåãããŸã§ã®äžé£ã®åŠçãé ãã
webpackãå©çšããŠã¿ã
webpackãå©çšããŠã¢ãžã¥ãŒã«ããã³ãã«ãããã¡ã€ã«ãåºåããŠã¿ãã
以äžã¯åºåãŸã§ã®ã€ã¡ãŒãžå³ã
webpackã®ã€ã³ã¹ããŒã«
以äžã®ã³ãã³ãã§ã°ããŒãã«ã€ã³ã¹ããŒã«ã§ããã
npm install webpack -g
ããããã°ããŒãã«ã€ã³ã¹ããŒã«ã¯ä»åwebpackãå©çšããããã£ã¬ã¯ããªïŒãããžã§ã¯ãïŒä»¥å€ã®å
šãŠã®ç°å¢ã«åœ±é¿ãåãŒããããããŒã«ã«ã€ã³ã¹ããŒã«ãããŠå©çšããæ¹ãè¯ãã
ããŒã«ã«ã€ã³ã¹ããŒã«æ¹æ³ãšãããŒã«ã«ã€ã³ã¹ããŒã«ããwebpackãªã©ã®packageã®å®è¡æ¹æ³ã¯åŸè¿°ããã
ãã£ã¬ã¯ããªæ§æ
ä»åwebpackãå©çšãããã£ã¬ã¯ããªæ§æã¯ä»¥äžãåæãšããã
.
âââ package.json
âââ public
â âââ index.html
â âââ js
â âââ bundle.js
âââ src
â âââ js
â âââ app.js
â âââ modules
â âââ addition-calculator.js
â âââ tax-calculator.js
âââ webpack.config.js
ããã€ãã®ããã±ãŒãžãããŒã«ã«ã€ã³ã¹ããŒã«ãããããpackage.jsonã¯ä»¥äžã®ã³ãã³ãã§çæããã
npm init -y
or
yarn init -y
webpackã®ããŒã«ã«ã€ã³ã¹ããŒã«
äžèšæ§æã®ã«ãŒãã§ä»¥äžã®ã³ãã³ããå®è¡ããã°webpackãããŒã«ã«ã€ã³ã¹ããŒã«ãããã
åŸè¿°ãããã©ã°ã€ã³ã®å©çšã§å¿
èŠãªãããã°ããŒãã«ã ãã§ã¯ãªãããŒã«ã«ã«ãã€ã³ã¹ããŒã«ããŠããã
npm install webpack --save-dev
or
yarn add webpack --dev
webpack-cliã®ã€ã³ã¹ããŒã«
webpackã³ãã³ãã§webpackãå®è¡ããããã«ã以äžã®ã³ãã³ãã§webpack-cliãã€ã³ã¹ããŒã«ããïŒwebpack 4ããå¿
èŠã«ãªã£ãïŒã
npm install webpack-cli --save-dev
or
yarn add webpack-cli --dev
ããŒã«ã«ã€ã³ã¹ããŒã«ããpackageïŒä»åã¯webpack-cliïŒãå®è¡ããããã«PATHãéã
çŸç¶ã®ãŸãŸã ãšãããŒã«ã«ã€ã³ã¹ããŒã«ãæåããŠãwebpackã³ãã³ããå®è¡ã§ããªãããã以äžã®ããã«PATHãéãå¿
èŠãããã
export PATH=$PATH:./node_modules/.bin
â»ãPATHãéãããäžæãªæ¹ã¯ä»¥äžãã芧ãã ããã
- PATHãéããšã¯ïŒ (Mac OS X)
- PATHãéãããã«ç°å¢å€æ°ã®èšå®ãçè§£ãã (Mac OS X)
åãã¡ã€ã«ã®è©³çް
webpack.config.jsïŒwebpackã®èšå®ãã¡ã€ã«ïŒ
webpackãå©çšããããã«ã¯webpack.config.jsãšãããã¡ã€ã«ã«èšå®ãèšè¿°ããå¿
èŠãããã
ä»åã®èšå®ã¯ä»¥äžã®éãã
// output.pathã«çµ¶å¯Ÿãã¹ãæå®ããå¿
èŠããããããpathã¢ãžã¥ãŒã«ãèªã¿èŸŒãã§ãã
const path = require('path');
module.exports = {
// ã¢ãŒãã®èšå®ãv4系以éã¯modeãæå®ããªããšãwebpackå®è¡æã«èŠåãåºã
mode: 'development',
// ãšã³ããªãŒãã€ã³ãã®èšå®
entry: './src/js/app.js',
// åºåã®èšå®
output: {
// åºåãããã¡ã€ã«å
filename: 'bundle.js',
// åºåå
ã®ãã¹ïŒçµ¶å¯Ÿãã¹ãæå®ããå¿
èŠãããïŒ
path: path.join(__dirname, 'public/js')
}
};
åé ç®ã®è©³çްã¯ä»¥äžã®éãã
mode
ã¢ãŒãïŒwebpack 4ãã远å ãããé
ç®ïŒã®èšå®ã
ã¢ãŒãã¯developmentãproductionãnoneãååšããã
developmentãproductionãæå®ãããšãæ§ã
ãªèšå®ãæå¹ã«ãªã£ãŠwebpackãå®è¡ãããã
äŸãã°ãproductionã«ããã°optimization.minimizerãšããèšå®ãæå¹ã«ãªããå§çž®ããããã¡ã€ã«ãåºåãããã
èšå®ã¯äžæžãå¯èœã§ãããäžæžããããé
ç®ã¯webpack.config.jsã«èšè¿°ããïŒè©³çްã¯åŸè¿°ïŒã
entry
ãšã³ããªãŒãã€ã³ãã®èšå®ãè€æ°èšå®ããããšãå¯èœã
ãšã³ããªãŒãã€ã³ããšã¯ã¢ãžã¥ãŒã«éã®äŸåé¢ä¿ã®è§£æãéå§ããå°ç¹ã®ããšã
åã¢ãžã¥ãŒã«ãèªã¿èŸŒãã§ã¡ã€ã³ã®åŠçãããJavaScriptãã¡ã€ã«ã ãšèªèããŠããã°è¯ãã
output
åºåã®èšå®ã
åºåãããã¡ã€ã«åãåºåå
ã®ãã¹ãæå®ããã
OSã«ãã£ãŠãã¹ãç°ãªãããšãé²ãããã«ãåºåå
ã®ãã¹ã®æå®ã«ã¯path.join()ãå©çšããã
app.jsïŒãšã³ããªãŒãã€ã³ãïŒ
2ã€ã®ã¢ã€ãã ã®äŸ¡æ Œãåç®ããæ¶è²»çšèŸŒã¿ã®äŸ¡æ Œãåºåããããšã³ããªãŒãã€ã³ãã
importãšããæ§æã§ã¢ãžã¥ãŒã«ãèªã¿èŸŒãã§å©çšã§ãããããaddition-calculator.jsãštax-calculator.jsã¢ãžã¥ãŒã«ãimportã§èªã¿èŸŒãã§å©çšããŠããã
import additionCalculator from './modules/addition-calculator';
import taxCalculator from './modules/tax-calculator';
var item1Price = 400;
var item2Price = 600;
var totalPrice = additionCalculator(item1Price, item2Price);
var tax = 1.08;
var priceIncludeTax = taxCalculator(totalPrice, tax);
console.log(priceIncludeTax);
addition-calculator.jsïŒã¢ãžã¥ãŒã«ïŒ
åŒæ°ã®number1ãšnumber2ãåç®ããŠè¿ãã¢ãžã¥ãŒã«ã
importã§èªã¿èŸŒãã§å©çšããããã«ã¯ãã¢ãžã¥ãŒã«ãå®çŸ©ããå¿
èŠãããã
ãã®ããexport defaultã§additionCalculatorãã¢ãžã¥ãŒã«ãšããŠå®çŸ©ããŠããã
export default function additionCalculator(number1 ,number2) {
return number1 + number2;
}
tax-calculator.jsïŒã¢ãžã¥ãŒã«ïŒ
åŒæ°priceãštaxãä¹ç®ããŠè¿ãã¢ãžã¥ãŒã«ã
addition-calculator.jsãšåæ§ã«export defaultã§taxCalculatorãã¢ãžã¥ãŒã«ãšããŠå®çŸ©ããŠããã
export default function taxCalculator(price ,tax) {
return Math.round(price * tax);
}
webpackã³ãã³ãã§ãã³ãã«ããããã¡ã€ã«ãåºå
äžèšæ§æã®webpack.config.jsãååšããéå±€ã§webpackã³ãã³ããå®è¡ããã°ããã³ãã«ããããã¡ã€ã«ãåºåãããã
ä»åã®èšå®ã ãšbundle.jsãšããååã®ãã¡ã€ã«ãpublic/js/ã«åºåãããã
webpack
# 以äžã®ãããªå®è¡çµæãåºåãããã
Hash: 46c490c9c2dbab33462c
Version: webpack 4.1.1
Time: 77ms
Built at: 2018-3-12 17:58:29
Asset Size Chunks Chunk Names
bundle.js 4.86 KiB main [emitted] main
Entrypoint main = bundle.js
[./src/js/app.js] 324 bytes {main} [built]
[./src/js/modules/addition-calculator.js] 92 bytes {main} [built]
[./src/js/modules/tax-calculator.js] 87 bytes {main} [built]
åºåãããbundle.jsã®èšè¿°ã¯ä»¥äžã®ããã«ãªã£ãŠããïŒäžéšèšè¿°çç¥ïŒã
/******/ ({
/***/ "./src/js/app.js":
/*!***********************!*\
!*** ./src/js/app.js ***!
\***********************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _modules_addition_calculator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./modules/addition-calculator */ \"./src/js/modules/addition-calculator.js\");\n/* harmony import */ var _modules_tax_calculator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modules/tax-calculator */ \"./src/js/modules/tax-calculator.js\");\n\n\n\nvar item1Price = 400;\nvar item2Price = 600;\nvar totalPrice = Object(_modules_addition_calculator__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(item1Price, item2Price);\nvar tax = 1.08;\nvar priceIncludeTax = Object(_modules_tax_calculator__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(totalPrice, tax);\n\nconsole.log(priceIncludeTax);\n\n//# sourceURL=webpack:///./src/js/app.js?");
/***/ }),
/***/ "./src/js/modules/addition-calculator.js":
/*!***********************************************!*\
!*** ./src/js/modules/addition-calculator.js ***!
\***********************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return additionCalculator; });\nfunction additionCalculator(number1 ,number2) {\n return number1 + number2;\n}\n\n//# sourceURL=webpack:///./src/js/modules/addition-calculator.js?");
/***/ }),
/***/ "./src/js/modules/tax-calculator.js":
/*!******************************************!*\
!*** ./src/js/modules/tax-calculator.js ***!
\******************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return taxCalculator; });\nfunction taxCalculator(price ,tax) {\n return Math.round(price * tax);\n}\n\n//# sourceURL=webpack:///./src/js/modules/tax-calculator.js?");
/***/ })
/******/ });
ã¢ãžã¥ãŒã«ããã³ãã«ãããŠããããšããããã
ãŸãã以äžã®ãããªbundle.jsãèªã¿èŸŒãã§ããhtmlãã¡ã€ã«ããã©ãŠã¶ã§éããã³ã³ãœãŒã«ã確èªããŠã¿ããšæ£åžžã«åäœããŠããããšããããã
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>webpack tutorial</title>
</head>
<body>
<script src="js/bundle.js"></script>
</body>
</html>
ã¢ãžã¥ãŒã«ããã³ãã«ããããã¡ã€ã«ãåºåã§ããã
ããã ãã ãšwebpackïŒã¢ãžã¥ãŒã«ãã³ãã©ïŒã®äœãè¯ãã®ããããããªããããã¡ãªããããªãå©çšããã®ãã説æããŠããã
ãªãwebpackïŒã¢ãžã¥ãŒã«ãã³ãã©ïŒãå©çšããã®ã
- æ©èœããšã«ãã¡ã€ã«ãåå²ïŒã¢ãžã¥ãŒã«åïŒããéçºãã§ãããã
- èªåãäœæããã¢ãžã¥ãŒã«ã ãã§ã¯ãªããå€éšã¢ãžã¥ãŒã«ïŒnpmãªã©ã§ã€ã³ã¹ããŒã«ã§ããããã±ãŒãžãªã©ïŒãå©çšã§ãããã
- ãªã¯ãšã¹ãæ°ãæžããããã
- äŸåé¢ä¿ã解決ãããã¡ã€ã«ãåºåã§ãããã
ãªã©ã¢ãžã¥ãŒã«ã®éçºãåå©çšããã³ãã«ãªã©ãé åçã ããã
æ©èœããšã«ãã¡ã€ã«ãåå²ïŒã¢ãžã¥ãŒã«åïŒããéçºãã§ãã
ãã¡ã€ã«ãåå²ïŒã¢ãžã¥ãŒã«åïŒããéçºã«ã¯ä»¥äžã®ãããªã¡ãªãããããã
- ã³ãŒããèŠããããªãïŒå¯èªæ§ã®åäžïŒ
- éçºäœæ¥ã®åæ ããã¹ãããæããªã
- åå空éãçæã§ããïŒå€æ°ã®ç«¶åãã°ããŒãã«æ±æãé²ãïŒ
- ã¢ãžã¥ãŒã«ã®ä¿å®æ§ãé«ãããã
- ã¢ãžã¥ãŒã«ã®åå©çšæ§ãé«ãããã
ã³ãŒããèŠããããªãïŒå¯èªæ§ã®åäžïŒ
1ã€ã®ãã¡ã€ã«ã«è€æ°ã®æ©èœãæžãããã³ãŒããããã1ã€ã®ãã¡ã€ã«ã«1ã€ã®æ©èœãæžãããã³ãŒãã®æ¹ãèŠãããã
éçºäœæ¥ã®åæ ããã¹ãã容æã«ãªã
1ã€ã®ãã¡ã€ã«ã«è€æ°ã®æ©èœãéäžããŠããå Žåãæ©èœæ¯ã«æ
åœãåãããªã©ã®äœæ¥åæ
ããèŸããããã¹ãããèŸãã
æ©èœããšã«ãã¡ã€ã«ãåå²ããŠããã°ãäœæ¥åæ
ããã¹ãããæãã
åå空éãçæã§ããïŒå€æ°ã®ç«¶åãã°ããŒãã«æ±æãé²ãïŒ
ã¢ãžã¥ãŒã«æ¯ã«åå空éãå²ãåœãŠãã°ã倿°ã®ç«¶åãã°ããŒãã«æ±æãé²ããã
ã¢ãžã¥ãŒã«ã®ä¿å®æ§ãé«ãããã
ã¢ãžã¥ãŒã«ã¯ä»ã®ã³ãŒããšã®äŸåæ§ãå°ãªãããã¹ããªã®ã§ããã£ããèšèšãããã°å€æŽãæ¡åŒµããããããªãã
ãã¡ã€ã«ãåå²ããã°ã¢ãžã¥ãŒã«ã«ãªãããã§ã¯ãªããããã¢ãžã¥ãŒã«ãä¿®æ£ããããã«ä»ã®ã³ãŒãã«å€§ããªåœ±é¿ãäžããå Žåãããã¯ã¢ãžã¥ãŒã«ãšã¯èšããªãããæ³šæã
ã¢ãžã¥ãŒã«ã®åå©çšæ§ãé«ãããã
æ±çšæ§ã®é«ãã¢ãžã¥ãŒã«ãéçºããã°åå©çšã§ããŠäŸ¿å©ã
ã³ãŒããã³ããã§åå©çšããå Žåã ãšãä¿®æ£æã«ã³ãããããã¡ã€ã«ãå
šãŠä¿®æ£ããå¿
èŠãããããã¢ãžã¥ãŒã«ãšããŠãã¡ã€ã«ãåå²ããŠããã°1ã€ã®ãã¡ã€ã«ãä¿®æ£ããã ãã§æžãã
èªåãäœæããã¢ãžã¥ãŒã«ã ãã§ã¯ãªããå€éšã¢ãžã¥ãŒã«ïŒnpmãªã©ã§ã€ã³ã¹ããŒã«ã§ããããã±ãŒãžãªã©ïŒãå©çšã§ãã
詊ãã«å€éšã¢ãžã¥ãŒã«ã®jQueryãå©çšããŠã¿ãããŸãã¯jqueryãããŒã«ã«ã€ã³ã¹ããŒã«ããã
npm install jquery --save
or
yarn add jquery
ã€ã³ã¹ããŒã«ããããã±ãŒãžã¯ä»ã®ã¢ãžã¥ãŒã«åæ§ãimportã§èªã¿èŸŒã¿ã¢ãžã¥ãŒã«ãšããŠå©çšã§ããã
import $ from 'jquery';
import additionCalculator from './modules/addition-calculator';
import taxCalculator from './modules/tax-calculator';
var item1Price = 400;
var item2Price = 600;
var totalPrice = additionCalculator(item1Price, item2Price);
var tax = 1.08;
var priceIncludeTax = taxCalculator(totalPrice, tax);
console.log(priceIncludeTax);
$('body').html(priceIncludeTax);
äžèšã®ç¶æ
ã§webpackã³ãã³ããå®è¡ãããšjqueryããã³ãã«ããããã¡ã€ã«ãåºåãããã
webpack
# 以äžã®ãããªå®è¡çµæãåºåãããã
Hash: 0929c9cb73f6110bfb50
Version: webpack 4.1.1
Time: 245ms
Built at: 2018-3-12 18:21:28
Asset Size Chunks Chunk Names
bundle.js 302 KiB main [emitted] [big] main
Entrypoint main [big] = bundle.js
[./src/js/app.js] 381 bytes {main} [built]
[./src/js/modules/addition-calculator.js] 92 bytes {main} [built]
[./src/js/modules/tax-calculator.js] 87 bytes {main} [built]
+ 1 hidden module
bundle.jsãèªã¿èŸŒãã§ããhtmlãã¡ã€ã«ããã©ãŠã¶ã§ç¢ºèªããŠã¿ããšãjQueryããã³ãã«ãããŠæ£åžžã«åäœããŠããããšããããã
å€éšã¢ãžã¥ãŒã«ãå©çšã§ãããã
- ããããããã¡ã€ã«ããŸãšããã«ãscriptã¿ã°ã§jQueryèªã¿èŸŒãã°è¯ãã®ã§ã¯ïŒã
ãšæã£ãæ¹ã¯å€ã
ãããšæãã®ãã確ãã«ã¡ãã£ãšããã³ãŒããæžãçšåºŠãªããã¡ãã®æ¹ã楜ã
ããããåŸè¿°ããã¡ãªãããèæ
®ãããšjQueryã®ãããªå€éšã¢ãžã¥ãŒã«ããã³ãã«ããæ¹ãè¯ãæãããã
ãªã¯ãšã¹ãæ°ãæžããã
以äžã¯jQueryãèªã¿èŸŒã¿ãjQueryã«äŸåããŠããapp.jsãèªã¿èŸŒãã§ããhtmlãã¡ã€ã«ã ãšæ³å®ããã
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>webpack tutorial</title>
</head>
<body>
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<script src="js/app.js"></script>
</body>
</html>
äžèšã®ãããªãã¡ã€ã«ã¯ä»¥äžã®æžå¿µç¹ãããã
- çŸåšã¯1ã€ã®ã©ã€ãã©ãªã ãèªã¿èŸŒãã§ããããå¿ èŠãªã©ã€ãã©ãªãå¢ããŠãªã¯ãšã¹ãæ°ãå¢ããå¯èœæ§ãããïŒãªã¯ãšã¹ãæ°ã®å¢å ã¯ããã©ãŒãã³ã¹äžè¯ããªãïŒã
webpackãå©çšããã°ãã¡ã€ã«ããã³ãã«ã§ããããããªã¯ãšã¹ãæ°ãæžãããã
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>webpack tutorial</title>
</head>
<body>
<!-- jQueryããã³ãã«ããããã¡ã€ã« -->
<script src="js/bundle.js"></script>
</body>
</html>
ããããå šãŠã®ãã¡ã€ã«ã1ã€ã«ãã³ãã«ããå Žåã以äžã®æžå¿µç¹ãèããããã
- ãã¡ã€ã«ãµã€ãºãéåžžã«å€§ãããªãèªã¿èŸŒã¿æéããããã
ãã³ãã«ãããã¡ã€ã«ãåå²ããŠåºåãããããããã®ãã¡ã€ã«ãéåæèªã¿èŸŒã¿ãããªã©ã®æ©èœãããã®ã§ããããå©çšããã
- ãã£ãã·ã¥ã掻çšã§ããªãã
ã©ã€ãã©ãªã¯é »ç¹ã«å€æŽããªããã¡ã€ã«ã®ããããã£ãã·ã¥ã掻çšãã¹ãã ããå
šãŠã®ãã¡ã€ã«ã1ã€ã«ãã³ãã«ãããšãããã§ããªãã
ãã®ãããé »ç¹ã«å€æŽãããã¡ã€ã«ã®ãã³ãã«ãšãã©ã€ãã©ãªçŸ€ããŸãšãããã³ãã«ã¯å¥ã«ããŠåºåããïŒoptimization.splitChunksãšããèšå®ãæå¹ã«ããå¿
èŠãããïŒã
äŸåé¢ä¿ã解決ãããã¡ã€ã«ãåºåã§ãã
以äžã¯jQueryãèªã¿èŸŒã¿ãjQueryã«äŸåããŠããapp.jsãèªã¿èŸŒãã§ããhtmlãã¡ã€ã«ã ãšæ³å®ããã
app.jsã¯jQueryã«äŸåããŠãããããjQueryãèªã¿èŸŒãåã«app.jsãèªã¿èŸŒããšåããªãã
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>webpack tutorial</title>
</head>
<body>
<!-- app.jsã¯jQueryã«äŸåããŠãããããjQueryãèªã¿èŸŒãã åŸã«èªã¿èŸŒãå¿
èŠãããã -->
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<script src="js/app.js"></script>
</body>
</html>
äžèšã®ãããªãã¡ã€ã«ã¯ä»¥äžã®æžå¿µç¹ãããã
- äŸåããŠããã©ã€ãã©ãªã1ã€ã ããªãè¯ãããäŸåãå¢ããã°å¢ããã»ã©äŸåé¢ä¿ããããèŸããªãã
- ããããã®ãã¡ã€ã«ã®äŸåé¢ä¿ãããã«çè§£ã§ããã®ã¯äœæ¥ããã人éã®ã¿ã§ãããå¥ã®äœæ¥è ãäŸåé¢ä¿ãããã«çè§£ããã®ã¯å°é£ã
- äŸåé¢ä¿ãè€éã«ãªãã°ãªãã»ã©ãè¿éã«ã¹ã¯ãªããã®èªã¿èŸŒã¿é ã倿Žãããæ¬æ¥äžèŠãªãã¡ã€ã«ãåé€ã§ããªããªãã
webpackãå©çšããã°äŸåé¢ä¿ã解決ããŠãã¡ã€ã«ããã³ãã«ãããããã¹ã¯ãªããã®é çªãèæ ®ããå¿ èŠã¯ãªããªãäŸåé¢ä¿ã«æ©ãŸãããå¯èœæ§ã¯äœããªãã
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>webpack tutorial</title>
</head>
<body>
<!-- äŸåé¢ä¿ã解決ããŠãŸãšãããããã¡ã€ã« -->
<script src="js/bundle.js"></script>
</body>
</html>
ãŸããäŸåããããã±ãŒãžïŒã¢ãžã¥ãŒã«ïŒãpackage.jsonã«æèšãããããã®å©çšãä¿ãã°ä»¥äžã®ãããªäºæ
ã«é¥ãå¯èœæ§ã¯äœããªãã
- çç±ããªãäœæ¥è ã«ãã£ãŠå©çšããã©ã€ãã©ãªã®ããŒãžã§ã³ãç°ãªãã
- 1ããŒãžã«åãã©ã€ãã©ãªãè€æ°èªã¿èŸŒãŸããŠããŸã£ãŠããã
- åãã©ã€ãã©ãªãæ§ã ãªãã£ã¬ã¯ããªã«ååšããã誰ãã©ãã§äœã®ããã«å©çšããŠããã®ãããããªãããè¿éã«æ¶ããªãã
webpackïŒã¢ãžã¥ãŒã«ãã³ãã©ïŒã®äœ¿ãã©ãã
äžèšã®ã¡ãªãããæ©èœãå¿
èŠã«æããããé
äºã«æããç¶æ³ã§ããã°å©çšãã¹ãã
éã«ããã«æšãŠãã³ãŒãã2ã30è¡çšåºŠã®ã³ã³ãã¯ããªã³ãŒããæžãçšåºŠãªãå¿
èŠãªããšæãã
webpackã¯éåžžã«å€ãã®æ©èœãååšãã现ããèšå®ãã§ããããwebpack.config.jsã®å
容ãçè§£ããã«ã³ããããŠå©çšããã¯ãããæ¹ãè¯ãã
å©çšçšéã«åãããŠwebpack.config.jsãçšæããã¹ãã
ãšã¯èšããå
šãŠã®æ©èœãå®å
šã«çè§£ããã®ã¯å°é£ãªã®ã§ãé »ç¹ã«å©çšããããªæ©èœããwebpack 4ãã远å ãããmodeãªã©ã®èšå®é
ç®ã玹ä»ãããŠããã
webpackã®æ§ã ãªæ©èœãèšå®é ç®
watchã¢ãŒã
ãã¡ã€ã«ãç£èŠããŠå€æŽããã£ãããã«ããåå®è¡ããæ©èœã®ããšã
watchã¢ãŒãã§ã¯åºæ¬çã«ãã£ãã·ã¥ãæå¹ã«ãªãããããã«ãæéãçããªãã
ãªãã·ã§ã³ãæå®ããŠwebpackã³ãã³ããå®è¡ããããwebpack.config.jsã«èšå®ãèšè¿°ããããšã§å©çšã§ããã
webpack --watch
const path = require('path');
module.exports = {
// watchã¢ãŒããæå¹ã«ãã
watch: true,
mode: 'development',
entry: "./app.js",
output: {
filename: "bundle.js",
path: path.join(__dirname, 'public/js')
}
}
ããŒããŒ
ç»åãCSSãªã©ã®JavaScript以å€ã®ãã¡ã€ã«ãJavaScriptã§æ±ããããã«å€æãããããã³ãã«ããåã«ã¢ãžã¥ãŒã«ã«å¯ŸããŠå®è¡ããæ©èœã®ããšã
TypeScriptãJavaScriptã«å€æãç»åãDataURLã«å€æãã³ãŒãããã§ãã¯ãããªã©ãããŒããŒã«ãã£ãŠæ©èœã¯æ§ã
ã
babel-loader
ES2015ïŒES6ïŒã®ã³ãŒããES5ã®ã³ãŒãã«å€æããããŒããŒã
ããŒããŒãå©çšããããã«ã¯ããã«å¿ããããã±ãŒãžãã€ã³ã¹ããŒã«ããŠããå¿
èŠãããã
babel-loaderãå©çšããããã«ä»¥äžã®ããã±ãŒãžãã€ã³ã¹ããŒã«ããã
npm install babel-loader @babel/core @babel/preset-env --save-dev
or
yarn add babel-loader @babel/core @babel/preset-env --dev
ã€ã³ã¹ããŒã«åŸãwebpack.config.jsã«babel-loaderã®èšå®ã远å ããã
// output.pathã«çµ¶å¯Ÿãã¹ãæå®ããå¿
èŠããããããpathã¢ãžã¥ãŒã«ãèªã¿èŸŒãã§ãã
const path = require('path');
module.exports = {
// ã¢ãŒãã®èšå®ãv4系以éã¯modeãæå®ããªããšãwebpackå®è¡æã«èŠåãåºã
mode: 'development',
// ãšã³ããªãŒãã€ã³ãã®èšå®
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 }]]
}
}
]
}
]
},
};
äžèšã®èšå®ã§webpackã³ãã³ããå®è¡ããã°ã以äžã®ãããªES2015ïŒES6ïŒã®ã³ãŒããã©ã®ãã©ãŠã¶ã§ãåãããã«å€æããŠãããã
import $ from 'jquery';
import additionCalculator from './modules/addition-calculator';
import taxCalculator from './modules/tax-calculator';
const item1Price = 400;
const item2Price = 600;
const totalPrice = additionCalculator(item1Price, item2Price);
const tax = 1.08;
const priceIncludeTax = taxCalculator(totalPrice, tax);
console.log(priceIncludeTax);
$('body').html(priceIncludeTax);
eslint-loader
JavaScriptã®ã³ãŒããæ€èšŒããããŒããŒã
eslint-loaderãå©çšããããã«ä»¥äžã®ããã±ãŒãžãã€ã³ã¹ããŒã«ããã
npm install eslint eslint-loader --save-dev
or
yarn add eslint eslint-loader --dev
ã€ã³ã¹ããŒã«åŸãwebpack.config.jsã«eslint-loaderã®èšå®ãšãã©ã°ã€ã³ã®èšè¿°ã远å ããã
// ãã©ã°ã€ã³ãå©çšããããã«webpackãèªã¿èŸŒãã§ãã
const webpack = require('webpack');
// output.pathã«çµ¶å¯Ÿãã¹ãæå®ããå¿
èŠããããããpathã¢ãžã¥ãŒã«ãèªã¿èŸŒãã§ãã
const path = require('path');
module.exports = {
// ã¢ãŒãã®èšå®ãv4系以éã¯modeãæå®ããªããšãwebpackå®è¡æã«èŠåãåºã
mode: 'development',
// ãšã³ããªãŒãã€ã³ãã®èšå®
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'
}
]
}
};
babel-loaderã®èšå®èšè¿°ãšã»ãšãã©å€ãããªãããbabel-loaderã§å€æããåã«ã³ãŒããæ€èšŒãããããenforce: 'pre'ãæå®ããã
ãŸããeslintã®èšå®ãã¡ã€ã«ã§ãã.eslintrcã远å ããã
â»webpackã®è§£èª¬èšäºã®ãããèšå®é
ç®ã®è©³çްã¯å²æããŸãã
{"extends":"eslint:recommended","parserOptions":{"ecmaVersion":6,"sourceType":"module"},"env":{"browser":true}}.eslintrcã¯package.jsonãšåãéå±€ã«è¿œå ããããããã£ã¬ã¯ããªæ§æã¯ä»¥äžã®éãã
.
âââ .eslintrc
âââ package.json
âââ public
â âââ index.html
â âââ js
â âââ bundle.js
âââ src
â âââ js
â âââ app.js
â âââ modules
â âââ addition-calculator.js
â âââ tax-calculator.js
âââ webpack.config.js
äžèšã®èšå®ã§webpackã³ãã³ããå®è¡ããã°ã以äžã®ããã«æ€èšŒçµæãåºåãããã
ERROR in ./src/js/app.js
/Users/mac/GitHub/webpack-v4-tutorial/src/js/app.js
11:1 error Unexpected console statement no-console
ããŒããŒãèšå®ããæžãæ¹ã¯è²ã ãã
ããŒããŒãèšå®ããæžãæ¹ã¯è²ã
ãããäžèšã®babel-loaderã®èšå®ã¯ä»¥äžã®ããã«ãæžããã
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: [
{
loader: 'babel-loader?{ "presets":[["@babel/env", {"modules": false}]] }'
}
]
}
]
}
以äžã®ããã«useãçç¥ããŠæžãããšãã§ããã
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
loader: 'babel-loader',
options: {
presets: [['@babel/preset-env', { modules: false }]]
}
}
]
}
以äžã®ããã«useãå©çšãããšãããŒããŒãè€æ°æå®ããããšçãå¯èœãªãããç¶æ³ã«å¿ããŠäœ¿ãåããã
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: [
{
loader: 'babel-loader',
options: {
presets: [['@babel/preset-env', { modules: false }]]
}
},
{
loader: 'jshint-loader'
}
]
}
]
}
ãã©ã°ã€ã³
ã¢ãžã¥ãŒã«ã®ãã³ãã«æã«å®è¡ãããæ§ã ãªåŠçã®ããšã
ProvidePlugin
æå®ããã¢ãžã¥ãŒã«ããã¹ãŠã®ãã¡ã€ã«ïŒã¢ãžã¥ãŒã«ïŒã®å€æ°ãšããŠå©çšå¯èœã«ãããã©ã°ã€ã³ã
å©çšå¯èœã«ããã¢ãžã¥ãŒã«ã¯importãªã©ã§èªã¿èŸŒãå¿
èŠããªããªãã
以äžã¯webpack.config.jsã«ProvidePluginã远å ãããã®ã
// ãã©ã°ã€ã³ãå©çšããããã«webpackãèªã¿èŸŒãã§ãã
const webpack = require('webpack');
// output.pathã«çµ¶å¯Ÿãã¹ãæå®ããå¿
èŠããããããpathã¢ãžã¥ãŒã«ãèªã¿èŸŒãã§ãã
const path = require('path');
module.exports = {
// ã¢ãŒãã®èšå®ãv4系以éã¯modeãæå®ããªããšãwebpackå®è¡æã«èŠåãåºã
mode: 'development',
// ãšã³ããªãŒãã€ã³ãã®èšå®
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',
// ããŒããŒã®ãªãã·ã§ã³
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'
})
]
};
jqueryãå
šãŠã®ã¢ãžã¥ãŒã«äžã§å€æ°$ãšããŠå©çšã§ããããã«ãããããapp.jsã®jqueryãèªã¿èŸŒãèšè¿°ãæ¶ããŠãæ£åžžã«åäœããã
import additionCalculator from './modules/addition-calculator';
import taxCalculator from './modules/tax-calculator';
const item1Price = 400;
const item2Price = 600;
const totalPrice = additionCalculator(item1Price, item2Price);
const tax = 1.08;
const priceIncludeTax = taxCalculator(totalPrice, tax);
console.log(priceIncludeTax);
$('body').html(priceIncludeTax);
mode
webpack 4ããæ°ãã远å ãããèšå®é
ç®ã
modeã«ã¯developmentãproductionãnoneãååšãããããããæå®ããªããšwebpackå®è¡æã«èŠåãã§ãã
developmentãproductionãæå®ãããšæ§ã
ãªèšå®ãæå¹ã«ãªããwebpackãå®è¡ãããã
ãªãã·ã§ã³ãæå®ããŠwebpackã³ãã³ããå®è¡ããããwebpack.config.jsã«èšå®ãèšè¿°ããããšã§modeãæå®ã§ããã
webpack --mode development
const path = require('path');
module.exports = {
mode: 'development',
entry: './app.js',
output: {
filename: 'bundle.js',
path: path.join(__dirname, 'public/js')
}
};
development
ãšã©ãŒè¡šç€ºããããã°ãããããã¡ã€ã«ã®åºåãåãã«ãæéã®ççž®ïŒãã£ãã·ã¥æå¹ïŒãªã©ã®èšå®ãæå¹ã«ãªãã
éçºæã®ãã¡ã€ã«ã®åºåã«ã¯ãã¡ãã®ã¢ãŒããå©çšããã
production
ãã¡ã€ã«ã®å§çž®ããã¢ãžã¥ãŒã«ã®æé©åãªã©ã®èšå®ãæå¹ã«ãªãã
æ¬çªæã®ãã¡ã€ã«ã®åºåã«ã¯ãã¡ãã®ã¢ãŒããå©çšããã
npm scriptsã§webpackãããããã®ã¢ãŒãã§å®è¡ãã
modeãwebpack.config.jsã«èšè¿°ããŠããŸããšãã¢ãŒãã倿Žãã床ã«èšè¿°ã倿Žããå¿
èŠãããã
ãããé²ãããã«npm scriptsã§webpackãå®è¡ã§ããããã«ããããã®ããã«package.jsonã«ä»¥äžã®èšè¿°ã远å ããã
"scripts":{"dev":"webpack --mode development --watch","build":"webpack --mode production"}èšè¿°åŸã®package.jsonã¯ä»¥äžã®ããã«ãªãã
{"name":"webpack-4-tutorial","version":"1.0.0","description":"webpack 4 quick start","author":"soraflat","scripts":{"dev":"webpack --mode development --watch","build":"webpack --mode production"},"devDependencies":{"@babel/core":"^7.2.2","@babel/preset-env":"^7.2.0","babel-loader":"^8.0.4","eslint":"^4.19.1","eslint-loader":"^2.0.0","webpack":"^4.27.1","webpack-cli":"^3.1.2"},"dependencies":{"jquery":"^3.2.1"},"license":"MIT"}äžèšã®èšè¿°ã§ä»¥äžã®ã³ãã³ããå®è¡ãããšããããã®ã¢ãŒãã§webpackãå®è¡ãããã
以äžã®ã³ãã³ãã§webpack --mode development --watchãå®è¡ãããã
npm run dev
or
yarn run dev
以äžã®ã³ãã³ãã§webpack --mode productionãå®è¡ãããã
npm run build
or
yarn run build
eslint-loaderãªã©ãå©çšããŠããå Žåããšã©ãŒãçŽããªããšãã«ãã§ããªãããæ³šæã
èšå®ã®äžæžã
webpack.config.jsã«èšå®ã远èšããã°ãããããã®ã¢ãŒãã§æå¹ã«ãªãèšå®ãäžæžãã§ããã
developmentã®äžæžãäŸ
以äžã¯developmentã¢ãŒãã§æå¹ã«ãªãdevtool: 'eval'ãäžæžãããäŸã
module.exports = {
mode: 'development',
entry: './src/js/app.js',
output: {
filename: 'bundle.js',
path: './public/js'
},
// developmentã¢ãŒãã§æå¹ã«ãªãdevtool: 'eval'ãäžæžã
devtool: 'source-map'
};
åºåããããœãŒã¹ãããã倿Žãããã
productionã®äžæžãäŸ
以äžã¯productionã¢ãŒãã§æå¹ã«ãªãoptimization.minimizerãäžæžãããäŸã
const TerserPlugin = require('terser-webpack-plugin');
module.exports = {
mode: 'production',
entry: './src/js/app.js',
output: {
filename: 'bundle.js',
path: './public/js'
},
// productionã¢ãŒãã§æå¹ã«ãªãoptimization.minimizerãäžæžããã
optimization: {
minimizer: [
new TerserPlugin({
terserOptions: {
compress: { drop_console: true }
}
})
]
}
};
å§çž®ãããã ãã§ã¯ãªããconsoleãåé€ããããã¡ã€ã«ãåºåãããã
modeã«ãã£ãŠèšå®ãåãæ¿ãã
- ã
productionã¢ãŒãã§ãã«ãããå Žåã¯consoleãæ¶ãããããdevelopmentã¢ãŒãã§ã¯æ®ããŠãããããã - ã
developmentã¢ãŒãã®å Žåã®ã¿ããœãŒã¹ããããåºåããããã
ãªã©ã®ç¶æ³ã§ãmodeã«ãã£ãŠèšå®ãåãæ¿ãããæãããã
以äžã®ããã«å€æŽããã°ãmodeã«ãã£ãŠèšå®ãåãæ¿ããããã
// ãã©ã°ã€ã³ãå©çšããããã«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ãªã©ã®èšè¿°ã¯çç¥
///
// 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 }
}
})
]
}
};
};
optimization.splitChunks
webpack 3ãŸã§ã«ååšããCommonsChunkPluginã«ä»£ããèšå®é ç®ã
â»è©³çްã¯å¥ã®èšäºã«æžããŸããã®ã§ããã¡ããåèã«ããŠãã ããã
webpack 4ãã远å ãããoptimization.splitChunksã®äœ¿ãæ¹ã䜿ãæ
webpack 3ãã4ãžã®ç§»è¡ã®æ³šæç¹
webpack 4ã«å¯Ÿå¿ããŠããªããã©ã°ã€ã³ãããŒããŒãåããªããªãå¯èœæ§ããããããç§»è¡ããåã«ãã§ãã¯ãããã
çµãã
ä»åŸãããã³ããšã³ãéçºã¯å€§èŠæš¡ãã€è€éã«ãªããšæãã®ã§ã¢ãžã¥ãŒã«åãèæ
®ããéçºã¯æ®æ®µããæèããŠãããŠæã¯ãªãã§ãã
ãšã¯èšãããããªãèªåã§ã¢ãžã¥ãŒã«ãéçºããã®ãé£ãããšæãããããŸãã¯å€éšã¢ãžã¥ãŒã«ã®å©çšããå§ããŠã¿ããšè¯ããšæããŸãã
æ¬èšäºã§ç޹ä»ããæ©èœã¯ã»ãã®äžéšã®ãããä»ã®æ©èœãæ°ã«ãªã£ãæ¹ã ã¯ãå ¬åŒããã¥ã¡ã³ããã芧ãã ããã
äž»ã«3ãã4ã®å€æŽç¹ãç¥ãããå Žåã¯ã以äžã«ç®ãéãããšããªã¹ã¹ã¡ããããŸãã
- To v4 from v3
- 次ã®ãªãªãŒã¹ã§ããwebpack 4ã®äž»ãªå€æŽç¹ãŸãšã
- webpack4ãžã®ç°¡åãªãã€ã°ã¬ãŒã·ã§ã³ã¬ã€ã
- webpack 4: released today!!
- webpack 4: mode and optimization
é¢é£èšäº
æ¬èšäºä»¥å€ã«ãwebpackã«é¢é£ããèšäºãæžããŠãããŸãã®ã§ãèå³ãããã°ãã¡ããã©ããã
以äžã¯æé©åïŒãã¡ã€ã«ãµã€ãºã®åæžããã£ãã·ã¥ã®å©çšïŒã«é¢ããèšäºã§ãã
- webpackã®Tree Shakingãçè§£ããŠäžèŠãªã³ãŒãããã³ãã«ãããã®ãé²ã
- webpack 4 ã® optimization.splitChunks ã®äœ¿ãæ¹ãäœ¿ãæ ã廿¢ããã CommonsChunkPlugin ããç§»è¡ããã
以äžã¯webpackãå©çšããéçºç°å¢ã«é¢ããèšäºã§ãã
- Babel 7ã§TypeScriptããã©ã³ã¹ãã€ã«ãã€ã€åãã§ãã¯ããã ãwebpack 4 + Babel 7 + TypeScript + TypeScript EsLint + Prettierã®éçºç°å¢ãæ§ç¯ããã
- Babel 7 ã®äž»ãªå€æŽç¹ãŸãšãïŒææ°ã®Babel ã§ã®polyfillã®äœ¿ãæ¹ãªã©ã«é¢ããŠèšèŒããŠããŸãïŒ
Parcelã«é¢ããŠ
話é¡ã«ãªã£ãParcelïŒã¢ãžã¥ãŒã«ãã³ãã©ïŒãè§ŠããŸããããå®åã§ã¯åŒãç¶ãwebpackãå©çšããããšã«ãªãããã§ãã
èšäºãæžããŸããã®ã§ãèå³ãããã°ãã¡ããã©ããã
Register as a new user and use Qiita more conveniently
- You get articles that match your needs
- You can efficiently read back useful information
- You can use dark theme
