æè¿ãä»ã®javascriptãã«ããŒãšäžç·ã«ãç§ã¯rollupJSã«äŒãå§ããŸããã ãããŠãäŒç€Ÿã®ã¡ã€ã³ãããžã§ã¯ãã§äœ¿çšãããã¢ãžã¥ãŒã«ã®äœæã«ã䜿çšãå§ããŸããã ãããã£ãŠããã®ã³ã³ãã¯ãã§äŸ¿å©ãªã³ã¬ã¯ã¿ãŒã«ãªãããã®ç¿»èš³ãå
±æããããšæããŸãã
ã¹ã¿ã€ã«ã¯èäœæš©ã§ããJavaScriptãã¡ã€ã«ãçµåããããã«ãwebpackããã³Browserifyã®ããã³ã³ãã¯ãã§å¹ççãªä»£æ¿æ段ãšããŠRollupã䜿çšããæ¹æ³ã«ã€ããŠåŠç¿ããŸãã
ãã®ã¬ã€ãã®æåŸã§ã次ã®ããŒã«ã¢ãããæ§æããŸãã
- ã¹ã¯ãªãããçµã¿åãããŠã
- æªäœ¿çšã®ã³ãŒããåé€ãã
- å€ããã©ãŠã¶ã§åäœããããã«å€æãã
- ãã©ãŠã¶ã§ã®Nodeã¢ãžã¥ãŒã«ã®äœ¿çšã®ãµããŒãã
- ç°å¢å€æ°ã®æäœãš
- ã³ãŒããæé©åããŠåºåãã¡ã€ã«ã®ãµã€ãºãå°ãããã
åææ¡ä»¶
ããŒã«ã¢ãããšã¯äœã§ããïŒ
éçºè
èªèº«ã説æããããã«ïŒ
ããŒã«ã¢ããã¯ãJavaScriptã¢ãžã¥ãŒã«ããããåŠçããããã®æ¬¡äžä»£ããŒã«ã§ãã ES2015ã¢ãžã¥ãŒã«ã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ãŸãã¯ã©ã€ãã©ãªããã«ãããããããåäžã®ãã¡ã€ã«ã«ããŒãžããŠããã©ãŠã¶ãŒããã³Node.jsã§å¹ççã«äœ¿çšããŸãã ããã¯ãBrowserifyãšwebpackã®äœ¿çšã«äŒŒãŠããŸãã Rollupã¯ãGruntãGulpãªã©ã®ããŒã«ãšåçã®æ§ç¯ããŒã«ãšåŒã¶ããšãã§ããŸãã ãã ããGruntãšGulpã䜿çšããŠJavaScriptãããåŠçã¿ã¹ã¯ã解決ã§ããŸããããããã®ããŒã«ã¯RollupãBrowserifyããŸãã¯webpackã®åæ§ã®æ©èœã䜿çšããããšã«æ³šæããããšãéèŠã§ãã
ããŒã«ã¢ããã圹ç«ã€ã®ã¯ãªãã§ããïŒ
ããŒã«ã¢ããã確å®ã«ã§ããããšã¯ãæ¬åœã«ãµã€ãºãæé©åããããã¡ã€ã«ãçæããããšã§ãã éå±ã§éå±ãªæç¶ãããªããã°ã次ã®ããã«èŠçŽã§ããŸããJavaScriptããããåŠçããä»ã®ããŒã«ãšæ¯èŒããŠãRollupã¯ã»ãšãã©ã®å Žåãããå°ããªããã±ãŒãžãäœæããããé«éã«åŠçããŸãã
ããã¯ãRollupãES2015ã¢ãžã¥ãŒã«ã«åºã¥ããŠãããBrowserifyããã³webpackã§äœ¿çšãããCommonJSã¢ãžã¥ãŒã«ãããå¹ççã§ããããã§ãã ããã«ãããŒã«ã¢ããã¯
ããªãŒã·ã§ãŒãã³ã°ã䜿çšããŠã¢ãžã¥ãŒã«ããæªäœ¿çšã®ã³ãŒããç°¡åã«åé€ã§ãããããæçµçã«å¿
èŠãªã³ãŒãã®ã¿ãæçµããã±ãŒãžã«å«ãŸããããšã«ãªããŸãã
ããªãŒã·ã§ãŒãã³ã°ã¯ã䜿çšå¯èœãªé¢æ°ãã¡ãœãããå€æ°ãããµãŒãããŒãã£ã®ã©ã€ãã©ãªãŸãã¯ãã¬ãŒã ã¯ãŒã¯ã䜿çšãããšéåžžã«å¹æçã«ãªããŸãã 1ã€ãŸãã¯2ã€ã®ã¡ãœããïŒlodashãŸãã¯jQueryãªã©ïŒã®ã¿ã䜿çšããå Žåãã©ã€ãã©ãªãå®å
šã«ããŒããããšãå€ãã®äžèŠãªãªãŒããŒããããçºçããŸãã
çŸåšãBrowserifyãšwebpackã«ã¯ããã«ãæã«å€ãã®æªäœ¿çšã³ãŒããå«ãŸããŠããŸãã ããããRollupã¯ãããè¡ããŸãããå®éã«äœ¿çšãããã®ã ããã¢ã»ã³ããªã«å«ãŸããŠããŸãã
æŽæ°ïŒ2016-08-22ïŒæ確ã«ããããã«ïŒããŒã«ã¢ããã§ã¯ãESã¢ãžã¥ãŒã«ã§ããªãŒã·ã§ãŒãã³ã°ã®ã¿ã䜿çšã§ããŸãã ããªãŒã·ã§ãŒãã³ã°ã¯ãå·çæç¹ã§ã¯lodashãšjQueryã®äž¡æ¹ã§ããCommonJSã¢ãžã¥ãŒã«ã«ã¯é©çšã§ããŸããã ããã«ãããããããããªãŒã·ã§ãŒãã³ã°ã¯ãããŒã«ã¢ããã®å©ç¹ã®1ã€ã§ãããé床/ããã©ãŒãã³ã¹æ¯ãšãã圢ã®äž»èŠãªå©ç¹ããããŸãã 詳现ã«ã€ããŠã¯ã
Richard Harrisã®èª¬æãš
Nolan Lawsonãåç
§
ããŠ
ãã ãã ã
ã泚æRollupã®å¹çã®ãããããããŸãããwebpack 2ã«ã¯ããªãŒã·ã§ãŒã¯ã®ãµããŒããå«ãŸããŸãã
ããŒã«ã¢ããã䜿çšããŠJavaScriptãã¡ã€ã«ãåŠçããã³æ§ç¯ããæ¹æ³
Rollupã®å¹æã瀺ãããã«ãRollupã䜿çšããŠJavaScriptãæ§ç¯ããéåžžã«åçŽãªãããžã§ã¯ããäœæããããã»ã¹ãèŠãŠã¿ãŸãããã
ã¹ããã0ïŒJAVASCRIPTãšCSSã䜿çšããŠãããžã§ã¯ããäœæããŸãã
ãŸãã䜿çšã§ããã³ãŒããå¿
èŠã§ãã ãã®ãã¥ãŒããªã¢ã«ã§ã¯ã GitHubã§å©çšå¯èœãªå°ããªã¢ããªã±ãŒã·ã§ã³ã䜿çšããŸã ã
ãã©ã«ãæ§é ã¯æ¬¡ã®ããã«ãªããŸãã
learn-rollup/
âââ build/
â âââ index.html
âââ src/
â âââ scripts/
â â âââ modules/
â â â âââ mod1.js
â â â âââ mod2.js
â â âââ main.js
â âââ styles/
â âââ main.css
âââ package.json
ã¿ãŒããã«ã§æ¬¡ã®ã³ãã³ããå®è¡ããŠããã®ãã¥ãŒããªã¢ã«ã§äœ¿çšããã¢ããªã±ãŒã·ã§ã³ãã€ã³ã¹ããŒã«ã§ããŸãã
ã泚æãªããžããªã®ã¯ããŒã³ãäœæããªãå Žåã¯ã build/index.html
ã³ã³ãã³ããç¬èªã®ã³ãŒãã«å¿
ãã³ããŒããŠãã ããã ãã®ã¬ã€ãã§ã¯ãHTMLã«ã€ããŠã¯èª¬æããŸããã
ã¹ããã1ïŒããŒã«ã¢ãããã€ã³ã¹ããŒã«ããæ§æãã¡ã€ã«ãäœæããŸãã
éå§ããã«ã¯ã次ã®ã³ãã³ãã§ããŒã«ã¢ãããã€ã³ã¹ããŒã«ããŸãã
npm install --save-dev rollup
次ã«ã learn-rollup
rollup.config.js
ãã©ã«ããŒã«rollup.config.js
ãšããæ°ãããã¡ã€ã«ãäœæããŸãã 以äžãè¿œå ããŸãã
export default { entry: 'src/scripts/main.js', dest: 'build/js/main.min.js', format: 'iife', sourceMap: 'inline', };
ãã®æ§æã®åãªãã·ã§ã³ã«ã€ããŠèª¬æããŸãããã
- ãšã³ããªã¯ãRollupã§åŠçãããã¡ã€ã«ã§ãã ã»ãšãã©ã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãããã¯ãã¹ãŠãåæåããäž»èŠãªJavaScriptãã¡ã€ã«ã§ããããšã³ããªãã€ã³ãã§ãã
- Destã¯ãåŠçãããã¹ã¯ãªãããä¿åãããå Žæã§ãã
- 圢åŒ-ããŒã«ã¢ããã¯ããã€ãã®åºå圢åŒããµããŒãããŠããŸãã ãã©ãŠã¶ã§äœæ¥ããŠããããã ããã«åŒã³åºãããé¢æ° ïŒIIFEïŒã䜿çšããã
è泚ããã¯ç解ããã®ãããè€éãªæŠå¿µã§ãããäžèšã§èšãã°ãä»ã®ã¹ã¯ãªãããšã®ç«¶åãé²ãããã«ãã³ãŒããç¬èªã®ã¹ã³ãŒãå
ã«ããããšãæã¿ãŸãã IIFEã¯ãç¬èªã®ã¹ã³ãŒãå
ã«ãã¹ãŠã®ã³ãŒããå«ã
ã¯ããŒãžã£ãŒã§ãã
- SourceMap-ããã¯ããœãŒã¹ã³ãŒãããããæäŸãããããã°ã«éåžžã«äŸ¿å©ã§ãã ãã®ãªãã·ã§ã³ã¯ãçæããããã¡ã€ã«ã«ããããè¿œå ãããã®ã¿ã¹ã¯ãç°¡çŽ åããŸãã
ã泚æformat
ãªãã·ã§ã³ã®è©³çŽ°ã«ã€ããŠã¯ã
Rollup's Wikiãåç
§ããŠãã ããã
ããŒã«ã¢ããæ§æãã§ãã¯
æ§æãã¡ã€ã«ãäœæããããã¿ãŒããã«ã§æ¬¡ã®ã³ãã³ããå®è¡ããŠããã¹ãŠãæ©èœããããšã確èªã§ããŸãã
./node_modules/.bin/rollup -c
ããã«ãããçæãããmain.min.js
ãã¡ã€ã«ãå«ãjs
ãµããã©ã«ããŒã䜿çšããŠããããžã§ã¯ãå
ã«build
ãšããæ°ãããã©ã«ããŒãäœæãããŸãã
ãã©ãŠã¶ã§build/index.html
ãéããšãããã±ãŒãžãæ£ããäœæãããããšãããããŸãã
ã泚æãã®æ®µéã§ã¯ãææ°ã®ãã©ãŠã¶ã®ã¿ããšã©ãŒãªãã§åäœããŸãã ãã®ã³ãŒããES2015 / ES6ããµããŒãããªãå€ããã©ãŠã¶ãŒã§åäœãããã«ã¯ãããã€ãã®ãã©ã°ã€ã³ãè¿œå ããå¿
èŠããããŸãã
çæãããããã±ãŒãžãå解ãã
ããªãŒã·ã§ãŒãã³ã°ã䜿çšãããšãRollupã¯åŒ·åãªããŒã«ã«ãªããŸãããã®çµæãåºåãã¡ã€ã«ã§åç
§ããã¢ãžã¥ãŒã«ã®æªäœ¿çšã®ã³ãŒãã¯ãããŸããã ããšãã°ã src/scripts/modules/mod1.js
ã«ã¯ãã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšãããªãsayGoodbyeTo ()
é¢æ°ããããŸãã䜿çšãããªããããRollupã¯æçµããã±ãŒãžã«ãããå«ããŸããã
ã³ãŒã (function () { 'use strict'; function sayHelloTo( name ) { const toSay = `Hello, ${name}!`; return toSay; } const addArray = arr => { const result = arr.reduce((a, b) => a + b, 0); return result; }; <habracut/>
ä»ã®ãã«ãããŒã«ã§ã¯ããããåžžã«åœãŠã¯ãŸãããã§ã¯ãªãã1ã€ãŸãã¯2ã€ã®é¢æ°ãåç
§ããããã«lodashãªã©ã®å€§ããªã©ã€ãã©ãªãå«ãããšãçæãããããã±ãŒãžãéåžžã«å€§ãããªãå¯èœæ§ããããŸãã
ããšãã°ã sayGoodbyeTo ()
ã§æå¹ã«ãªããçµæã®ããã±ãŒãžã¯Rollupãçæãããµã€ãºã®2å以äžã«ãªããŸãã
è泚ãã ãããã®ãããªå°ããªãã¹ãã¢ããªã±ãŒã·ã§ã³ãæ±ã£ãŠããå Žåããã¡ã€ã«ãµã€ãºã2åã«ããŠãããã»ã©æéã¯ããããŸããã æ¯èŒã®ããã«ãçŸæç¹ã§ã¯ããã®ãµã€ãºã¯ã3KB察ã8KBã§ã
ã¹ããã2ïŒä»ããæ°ããJAVASCRIPTæ©èœã䜿çšããããã«BABELãã€ã³ã¹ããŒã«ãã
çŸæç¹ã§ã¯ãææ°ã®ãã©ãŠã¶ãŒã§ã®ã¿åäœããã³ãŒãããããäžéšã®ãã©ãŠã¶ãŒã§ã¯åäœããªãã³ãŒãããããŸãããã®ããŒãžã§ã³ã¯æ°ããŒãžã§ã³é
ããŠãããããã¯çæ³çã§ã¯ãããŸããã
幞ããªããšã«ã ããã«ã¯ç§ãã¡ãå©ããããšãã§ããŸãã ãã®ãããžã§ã¯ãã䜿çšãããš ãæ°ããJavaScriptæ©èœïŒ ES6 / ES2015ãªã© ïŒãES5ã«å€æã§ããŸã ããã®ã³ãŒãã¯ãçŸåšäœ¿çšå¯èœãªã»ãšãã©ãã¹ãŠã®ãã©ãŠã¶ãŒã§æ©èœããŸãã
Babelã䜿çšããããšããªãå Žåãéçºè
ã®äººçã¯æ°žé ã«å€ãããŸãã æ°ããJavaScriptæ©èœãžã®ã¢ã¯ã»ã¹ã«ãããäžè¬çã«èšèªãããç°¡åã«ãããç°¡æœã«ããã楜ãããªããŸãã
ãã«ãããã»ã¹ã®äžéšã«ããŸããããããããã°ãããèããå¿
èŠã¯ãããŸããã
å¿
èŠãªã¢ãžã¥ãŒã«ãã€ã³ã¹ããŒã«ãã
ãŸãã Babel Rollupãã©ã°ã€ã³ãšå¯Ÿå¿ããBabelããªã»ãããã€ã³ã¹ããŒã«ããå¿
èŠããããŸãã
ã泚æBabel Presetsã¯ãBabelã«æ¬åœã«äŒãããããšãäŒããBabelãã©ã°ã€ã³ã®ã³ã¬ã¯ã·ã§ã³ã§ãã
.babelrc
ã
次ã«ããããžã§ã¯ãã«ãŒããã£ã¬ã¯ããª(learn-rollup/
.babelrc
(learn-rollup/
ïŒã«.babelrc
ãšããæ°ãããã¡ã€ã«ãäœæããŸãã å
éšã§ã次ã®JSONãè¿œå ããŸãã
{ "presets": [ [ "es2015", { "modules": false } ] ], "plugins": [ "external-helpers" ] }
ããã«ãããBabelãã³ã³ãã€ã«æã«äœ¿çšããããªã»ãããæå®ããŸãã
ã泚ænpmã®ä»¥åã®ããŒãžã§ã³ïŒ<v
2.15.11
ïŒã§ã¯ã
es2015-rollup
ããªã»ããã®ãšã©ãŒã確èªã§ããŸãã
npm
ã¢ããã°ã¬ãŒãã§ããªãå Žåã¯ã代æ¿ã®
.babelrc
æ§æã«ã€ããŠ
ãã®åé¡ãåç
§ããŠãã ããã
UPDATE rollup.config.js
ã
BabelãããŒã«ã¢ããã«è¿œå ããã«ã¯ãrollup.config.jsãæŽæ°ããå¿
èŠããããŸãã å
éšã§ã¯ãBabelãã©ã°ã€ã³ãã€ã³ããŒããããã©ã°ã€ã³ã®é
åãå«ããã©ã°ã€ã³ãšåŒã°ããæ°ããæ§æããããã£ã«è¿œå ããŸãã
ãµãŒãããŒãã£ã®ã¹ã¯ãªããã®ç¿»èš³ãé¿ããããã«ã node_modules
ãã£ã¬ã¯ããªãç¡èŠããããã«exclude
ããããã£ãèšå®ããŸãã
åºåããã±ãŒãžã確èªãã
ãã¹ãŠãã€ã³ã¹ããŒã«ããŠæ§æããããããã±ãŒãžãåæ§ç¯ã§ããŸãã
./node_modules/.bin/rollup -c
çµæãèŠããšãã»ãŒåãã«èŠããŸãã ãã ããããã€ãã®éèŠãªéãããããŸããããšãã°ã addArray ()
é¢æ°ãèŠãŠãã ããã
var addArray = function addArray(arr) { var result = arr.reduce(function (a, b) { return a + b; }, 0); return result; };
Babel ãé¢æ°ã® (arr.reduce ((a, b) => a + b, 0))
ç¢å° (arr.reduce ((a, b) => a + b, 0))
ãéåžžã®é¢æ°ã«å€æããæ¹æ³ãã芧ãã ããã
ããã¯å®è¡äžã®å€æã§ããçµæã¯åãã§ãããã³ãŒãã¯IE9ã§ãµããŒããããããã«ãªããŸããã
éèŠã§ãBabelã¯
babel-polyfillãæäŸããŸããããã«ãããIE8以åã§
Array.prototype.reduce ()
ãããªãã®ãå©çšå¯èœã«ãªããŸãã
ã¹ããã3ïŒJAVASCRIPTãšã©ãŒãã¹ãçšã®ESLINTãè¿œå ãã
ãªã³ã¿ãŒã䜿çšããŠã³ãŒããäœæãããšãäžè²«ããã³ãŒãã£ã³ã°æ¹æ³ãæäŸãããæŒç®åãæ¬åŒ§ã®æ¬ èœãªã©ã®è€éãªãšã©ãŒãèŠã€ããã®ã«åœ¹ç«ã¡ãŸãã
ãã®ãããžã§ã¯ãã§ã¯ã ESLintã䜿çšããŸã ã
ã¢ãžã¥ãŒã«ã®ã€ã³ã¹ããŒã«
ESLintã䜿çšããã«ã¯ã ESLint Rollupãã©ã°ã€ã³ãã€ã³ã¹ããŒã«ããå¿
èŠããããŸã ã
npm install --save-dev rollup-plugin-eslint
.eslintrc.json
ã
å¿
èŠãªãšã©ãŒã®ã¿ã確å®ã«ååŸããã«ã¯ãæåã«ESLintãæ§æããå¿
èŠããããŸãã 幞ããªããšã«ã次ã®ã³ãã³ããå®è¡ããããšã«ããããã®æ§æã®ã»ãšãã©ãèªåçã«äœæã§ããŸãã
ã¿ãŒããã« $ ./node_modules/.bin/eslint --init ? How would you like to configure ESLint? Answer questions about your style ? Are you using ECMAScript 6 features? Yes ? Are you using ES6 modules? Yes ? Where will your code run? Browser ? Do you use CommonJS? No ? Do you use JSX? No ? What style of indentation do you use? Spaces ? What quotes do you use for strings? Single ? What line endings do you use? Unix ? Do you require semicolons? Yes ? What format do you want your config file to be in? JSON Successfully created .eslintrc.json file in /Users/jlengstorf/dev/code.lengstorf.com/projects/learn-rollup
äžèšã®è³ªåã«çãããšã .eslintrc.json
次ã®çµæãåŸãããŸãã
.eslintrc.json { "env": { "browser": true, "es6": true }, "extends": "eslint:recommended", "parserOptions": { "sourceType": "module" }, "rules": { "indent": [ "error", 4 ], "linebreak-style": [ "error", "unix" ], "quotes": [ "error", "single" ], "semi": [ "error", "always" ] } }
TWEAK .eslintrc.json
ãã ãããããžã§ã¯ãã®ãšã©ãŒãåé¿ããããã«ãããã€ãã®èª¿æŽãè¡ãå¿
èŠããããŸãã
- 4ã§ã¯ãªã2ã€ã®ã¹ããŒã¹ã䜿çšããŸãã
- åŸã§
ENV
ãšããã°ããŒãã«å€æ°ã䜿çšããããããã¯ã€ããªã¹ãã«ç»é²ããå¿
èŠããããŸãã
.eslintrc.json
èšå®ã«æ¬¡ã®å€æŽãå ããŸã.eslintrc.json
ããããã£ãšindent
ããããã£ã®èšå®ïŒ
.eslintrc.json { "env": { "browser": true, "es6": true }, "globals": { "ENV": true }, "extends": "eslint:recommended", "parserOptions": { "sourceType": "module" }, "rules": { "indent": [ "error", 2 ], "linebreak-style": [ "error", "unix" ], "quotes": [ "error", "single" ], "semi": [ "error", "always" ] } }
UPDATE rollup.config.js
次ã«ãESLintãã©ã°ã€ã³ãã€ã³ããŒãããŠãããŒã«ã¢ããæ§æã«è¿œå ããŸãã
ã³ã³ãœãŒã«ã§çµæã確èªãã
./node_modules/.bin/rollup -c
ãå®è¡ããŠããäœãèµ·ããŠããªãããã§ãã å®éãçŸåšã®åœ¢åŒã®ã¢ããªã±ãŒã·ã§ã³ã³ãŒãã¯åé¡ãªãlinterãééããŸãã
ããããã»ãã³ãã³ãåé€ãããªã©ã®åé¡ãå°å
¥ãããšãESLintãã©ã®ããã«åœ¹ç«ã€ããããããŸãã
$ ./node_modules/.bin/rollup -c /Users/jlengstorf/dev/code.lengstorf.com/projects/learn-rollup/src/scripts/main.js 12:64 error Missing semicolon semi 1 problem (1 error, 0 warnings)
æœåšçã«ãåé¡ãæ€åºããããã¡ã€ã«ãè¡ãåãªã©ãé ãããšã©ãŒãå«ãå¯èœæ§ã®ãããã®ãããã«è¡šç€ºãããŸãã
ããã¯ãããã°äžã®ãã¹ãŠã®ãšã©ãŒããç§ãã¡ãæãããã§ã¯ãããŸããããæãããªã¿ã€ããã¹ã«ãã£ãŠåŒãèµ·ãããããšã©ãŒãé€ããŠãããã»ã¹ã倧å¹
ã«ã¹ããŒãã¢ããããŸãã
è泚ããããç§ãã¡ã®å€ãã¯ããšã©ãŒã®ããååãšåããããæããªãã®ã«ãªããšã©ãŒãèŠã€ããã®ã«å€ãã®æéãè²»ãããŸããããªã³ã¿ãŒã䜿çšããããšã§äœæ¥å¹çã®åäžãèªåŒµããããšã¯å°é£ã§ãã
ã¹ããã4ïŒESã¢ãžã¥ãŒã«ã§ã¯ãªãåŠçã®ããã®ãã©ã°ã€ã³ã®è¿œå
ããã¯ãã¢ã»ã³ããªã§ããŒãã¹ã¿ã€ã«ã®ã¢ãžã¥ãŒã«ã䜿çšããå Žåã«éèŠã§ãã ãã®ãã©ã°ã€ã³ã䜿çšããªããšã require
ã䜿çšããŠãã®ã©ã€ãã©ãªã«æ¥ç¶ãããšãã«ãšã©ãŒã¡ãã»ãŒãžã衚瀺ãããŸãã
äŸåé¢ä¿ãšããŠããŒãã¢ãžã¥ãŒã«ãè¿œå ãã
ãã®ãµã³ãã«ãããžã§ã¯ãã¯ããµãŒãããŒãã£ã®ã¢ãžã¥ãŒã«ãåç
§ããã«ç°¡åã«è§£èªã§ããŸãããå®éã®ãããžã§ã¯ãã§ã¯åæžã§ããŸããã ãããã£ãŠãRollupæ§æãæ¬åœã«äŸ¿å©ã«ããããã«ãã³ãŒãå
ã§ãµãŒãããŒãã£ã®ã¢ãžã¥ãŒã«ãåç
§ã§ããããšã確èªããŸãããã
ç°¡åã«ããããã«ã debug
ããã±ãŒãžã䜿çšããŠã³ãŒãã«åçŽãªãã¬ãŒãè¿œå ããŸãã ã€ã³ã¹ããŒã«ããŠéå§ããŸãã
npm install --save debug
ã泚æããã¯ã¡ã€ã³ãããžã§ã¯ãã§ç€ºãããããã-saveã䜿çšããããšãéèŠã§ããããã«ãããdevDependenciesãç¡èŠãããçç£ãšã©ãŒãåé¿ãããŸãã
次ã«ã src/scripts/main.js
ãç°¡åãªãã®ã³ã°ãè¿œå ããŸãããã
ããŒã«ã¢ãããéå§ãããšãèŠåã衚瀺ãããŸãã
$ ./node_modules/.bin/rollup -c Treating 'debug' as external dependency No name was provided for external module 'debug' in options.globals â guessing 'debug'
ãŸããindex.htmlãå床å®è¡ãããšãã³ã³ãœãŒã«ã«ReferenceErrorãšã©ãŒã衚瀺ãããŸãã
ã©ãã ããã¯æ©èœããŸããã§ããã
ããã¯ãNodal Nodeã¢ãžã¥ãŒã«ãCommonJSã䜿çšããŠããããã§ããCommonJSã¯Rollupãšäºææ§ããããŸããã ãã®åé¡ã解決ããã«ã¯ãããŒãã®äŸåé¢ä¿ãšCommonJSã¢ãžã¥ãŒã«ãåŠçããããã®ãã©ã°ã€ã³ãããã€ãè¿œå ããå¿
èŠããããŸãã
ãããã®ã¢ãžã¥ãŒã«ã®ã€ã³ã¹ããŒã«
ãã®åé¡ãåé¿ããã«ã¯ã2ã€ã®ãã©ã°ã€ã³ãè¿œå ããå¿
èŠããããŸãã
rollup-plugin-node-resolve
ãããã«ããã node_modules
ããnode_modules
ããŒãã£ã®ã¢ãžã¥ãŒã«ãããŒãã§ããŸããrollup-plugin-commonjs
ã¢ãžã¥ãŒã«ã®æ¥ç¶ããµããŒãããŸãã
次ã®ã³ãã³ãã§äž¡æ¹ã®ãã©ã°ã€ã³ãã€ã³ã¹ããŒã«ããŸãã
npm install --save-dev rollup-plugin-node-resolve rollup-plugin-commonjs
UPDATE rollup.config.js
次ã«ããããããŒã«ã¢ããæ§æã«ã€ã³ããŒãããŸãã
ã³ã³ãœãŒã«ã§çµæã確èªãã
./node_modules/.bin/rollup -c
ã³ãã³ãã䜿çšããŠåæ§ç¯ãå®è¡ãããã©ãŠã¶ãŒãå床確èªããŠçµæã確èªããŸãã
ã¹ããã5ïŒç°å¢ã®ãã©ã°ã€ã³ãæäŸãããã©ã°ã€ã³ãè¿œå ãã
ç°å¢å€æ°ã¯ãéçºäžã«å€ãã®ãããªãã¯ããè¿œå ãããã°ã®ãªã³/ãªãã®åãæ¿ããéçºã¹ã¯ãªããã®ã¿ã®å°å
¥ãªã©ãè¡ãæ©äŒãäžããŠãããŸãã
ãããã£ãŠãRollupã§ãããã䜿çšã§ããããšã確èªããŸãããã
main.js
ãžã®ENV
æ¡ä»¶ã®main.js
ç°å¢å€æ°ã䜿çšããŠãæ¬çªã¢ãŒãã§ãªãå Žåã«ã®ã¿ãã®ã³ã°ãæå¹ã«ããŸãããã src/scripts/main.js
ã log()
ãåæåããæ¹æ³ãå€æŽãlog()
ã
ãã ãããããžã§ã¯ã(./node_modules/.bin/rollup -c)
ãåæ§ç¯ããŠãã©ãŠã¶ãŒã確èªãããšãããã«ããENV
ReferenceError
ããããšãããããŸãã
ããã¯é©ãã¹ãããšã§ã¯ãããŸãããäœãç¹å®ããŠããªãããã§ãã ãããã ENV = production ./node_modules/.bin/rollup -c
ãããªãã®ãè©ŠããŠãããŸã æ©èœããŸããã ããã¯ããã®æ¹æ³ã§ç°å¢å€æ°ãèšå®ãããšãRollupã§ã®ã¿äœ¿çšå¯èœã«ãªããRollupã䜿çšããŠäœæãããããã±ãŒãžã§ã¯äœ¿çšã§ããªããªãããã§ãã
ãã©ã°ã€ã³ã䜿çšããŠç°å¢å€æ°ãããã±ãŒãžã«æž¡ãå¿
èŠããããŸãã
ãããã®ã¢ãžã¥ãŒã«ã®ã€ã³ã¹ããŒã«
rollup-plugin-replace
ã€ã³ã¹ããŒã«ããããšããå§ããŸããããã¯ãæ¬è³ªçã«ã¯åãªãæ€çŽ¢ãšäº€æã®ãŠãŒãã£ãªãã£ã§ãã å€ãã®ããšãå®è¡ã§ããŸãããç®çã®ããã«ãç°å¢å€æ°ã®å€èŠ³ãèŠã€ããŠå®éã®å€ã«çœ®ãæããŸãïŒããšãã°ãã¢ã»ã³ããªå
ã®ãã¹ãŠã®ENV
ãšã³ããªã¯ãçç£ãã«çœ®ãæããããŸãïŒã
npm install --save-dev rollup-plugin-replace
UPDATE rollup.config.js
rollup.config.js
ã€ã³ããŒãããŠããã©ã°ã€ã³ã®ãªã¹ãã«è¿œå ããŸãããã
æ§æã¯éåžžã«ç°¡åã§ããããŒãšå€ã®ãã¢ã®ãªã¹ããè¿œå ããã ãã§ãããŒã¯çœ®æããæååã§ãããå€ã¯çœ®æãããã®ã§ãã
ãã®æ§æã§ã¯ãENVãprocess.env.NODE_ENVïŒNodeã¢ããªã±ãŒã·ã§ã³ã§ç°å¢å€æ°ãèšå®ããéåžžã®æ¹æ³ïŒãŸãã¯ãéçºããšèšè¿°ããŠããŸãã JSON.stringifyïŒïŒã䜿çšããŠãäºéåŒçšç¬Šã§å²ãŸããå€ãååŸããŸãã
ãµãŒãããŒãã£ã®ã³ãŒãã®åé¡ãæé€ããããã«ãnode_modulesãã£ã¬ã¯ããªãšããã«å«ãŸãããã¹ãŠã®ããã±ãŒãžãç¡èŠããããã«excludeããããã£ãèšå®ããŸãã ïŒ ãã®ä»¶ã«ã€ããŠ@wesleycoderã«æè¬ããŸã ïŒã
çµæã確èªãã
ãã«ããåæ§ç¯ããŠããã©ãŠã¶ã確èªããŸãããã ã³ã³ãœãŒã«ã®ãã°ã¯ã以åãšå€ãããªãã¯ãã§ãã ããã¯è¯ãããšã§ã-ããã¯ããã©ã«ãå€ã䜿çšããããšãæå³ããŸãã
ã»ããã¢ãããæ©èœããããšã確èªããã«ã¯ããããã¯ã·ã§ã³ã¢ãŒãã§åæ§ç¯ãå®è¡ããŸãã
NODE_ENV=production ./node_modules/.bin/rollup -c
ã泚æWindowsã§ã¯ã
SET NODE_ENV = production ./node_modules/.bin/rollup -c
ã䜿çšããŠãç°å¢å€æ°ãæäœããéã®ãšã©ãŒãåé¿ããŸãã ãã®ã³ãã³ãã«åé¡ãããå Žåã
詳现ã«ã€ããŠã¯ãã®åé¡ã
åç
§ããŠãã ããã
ããŒãžããªããŒãããåŸãã³ã³ãœãŒã«ã«äœãæžã蟌ãŸããªãããšã確èªããŠãã ããã
ã¹ããã6ïŒUGLIFYJSãè¿œå ããŠãçæãããã¹ã¯ãªãããå§çž®ããã³æå°åãã
, , UglifyJS . , , , «» â , .
UglifyJS , rollup-plugin-uglify
.
:
npm install --save-dev rollup-plugin-uglify
rollup.config.js
Uglify Rollup. , uglification :
uglify ()
, NODE_ENV
«production».
, Rollup :
NODE_ENV=production ./node_modules/.bin/rollup -c
, . , build/js/main.min.js
:
~ 42 . UglifyJS, ~ 29 â 30% .
â ãœãŒã¹
:
rollup , webpack( ), , , . , , , (tree-shaking) . , , , .