Rollup.js 下一代的ES6模塊打包機
來自: https://segmentfault.com/a/1190000004499989
在我們模塊化項目時,經常調用一個模塊,使用了其中一個方法,其它N多的方法我們未調用,我們希望未調用到的方法或者變量忽略它們,并且不打包到js文件中,這樣在大項目里面可以顯著減少文件的體積,特別在移動終端,雖然4G非常快,但是我還是希望更省流量。
ES6幫我們實現了,目前 webpack 和 browserify 都還不支持這一屌爆了的功能。如果你現在就想實現這一功能的話,你就可以嘗試使用 rollup.js
maths.js
export function square ( x ) { return x * x; } export function cube ( x ) { return x * x * x; }
main.js
import { cube } from './maths.js'; console.log( cube( 5 ) ); // 125
通過 rollup.js 編譯, maths.js 中未調用的方法 square() 并未打包到新的js中。代碼如下:
(function () { 'use strict'; function cube ( x ) { return x * x * x; } console.log( cube( 5 ) ); // 125 }());
使用方法
使用 gulp 工具來搞定打包功能。首先在根目錄建立 gulpfile.js 和 package.json 文件這個是 gulp 工具的標配。如果你不知道怎么玩兒 gulp ,你得先去研究研究
先安裝依賴模塊
npm install gulp --save npm install rollup --save npm install rollup-plugin-commonjs --save npm install rollup-plugin-node-resolve --save
gulpfile.js
var gulp = require('gulp'); var fs = require('fs'); var rollup = require('rollup').rollup; var commonjs = require('rollup-plugin-commonjs'); var nodeResolve = require('rollup-plugin-node-resolve'); gulp.task('script', function () { return rollup({ entry: 'src/main.js', plugins: [ nodeResolve({ jsnext: true }), commonjs() ] }).then(function (bundle) { // 輸出 bundle + sourcemap var result = bundle.generate({ // output format - 'amd', 'cjs', 'es6', 'iife', 'umd' // amd – 使用像requirejs一樣的銀木塊定義 // cjs – CommonJS,適用于node和browserify / Webpack // es6 (default) – 保持ES6的格式 // iife – 使用于<script> 標簽引用的方式 // umd – 適用于CommonJs和AMD風格通用模式 format: 'cjs' }); fs.writeFileSync( 'bundle.js', result.code ); bundle.write({ format: 'cjs', dest: 'dist/main.js' }); }); });
再去建立 main.js 和 main.js ,運行 npm script 進行打包,就可得到你想要的js 文件了。
rollup 插件
Plugins : https://github.com/rollup/rollup/wiki/Plugins
-
babel – transpile code with Babel
-
browserify-transform – use Browserify transforms as plugins
-
coffee-script – convert CoffeeScript to JS
-
commonjs – convert CommonJS modules to ES6
-
eslint - verify entry and imported scripts
-
includepaths – provide base paths to resolve imports from
-
inject – detect dependencies and inject them
-
istanbul – Instruments code for code coverage with Istanbul
-
json – convert JSON to ES6
-
memory - load entry from memory
-
multi-entry – allows multiple 'entry points' instead of just one
-
node-resolve – use the Node.js module resolution algorithm (e.g. modules from node_modules , installed with npm)
-
pegjs - import PEG.js grammars as parsers
-
postcss - compile postcss and insert to head
-
ractive – precompile Ractive components
-
replace – replace occurrences of a set of strings
-
riot - compile Riot.js tag file
-
string – import text files as strings
-
stylus-css-modules – compile Stylus and inject CSS modules
-
uglify - minify generated bundle
-
vue - compile vue components