Rollup.js 下一代的ES6模塊打包機

LowellAreva 8年前發布 | 33K 次閱讀 JavaScript開發 ECMAScript

來自: 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

參考資料

官網 : http://rollupjs.org

Github : https://github.com/rollup/rollup

 本文由用戶 LowellAreva 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!