成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

使用rollup構(gòu)建你的JavaScript項(xiàng)目【一】

meislzhua / 688人閱讀

摘要:瀏覽器使用編譯成一個(gè)自執(zhí)行函數(shù),可以直接在中的標(biāo)簽直接引入使用編譯成模塊瀏覽器和通用模式需要設(shè)置一個(gè)大報(bào)名使用配置文件,來一個(gè)項(xiàng)目開始之前,先在本地創(chuàng)建一個(gè)項(xiàng)目,并在根目錄通過創(chuàng)建一個(gè)文件,構(gòu)建一個(gè)用來管理依賴的項(xiàng)目。

什么是Rollup?

前端項(xiàng)目工程化構(gòu)建工具也發(fā)展好幾年了,生態(tài)演化,慢慢發(fā)展出了很多好的構(gòu)建項(xiàng)目的工具,從最開始的grunt,gulpwebpack,前端的工程化越來越方便,給前端帶到了一個(gè)美好的時(shí)代。

目前,社區(qū)中比較火的一個(gè)構(gòu)建工具,是rollup,用rollup來打包模塊化的JavaScript代碼非常的便利。它使用ES6中的新的語法標(biāo)準(zhǔn)來打包模塊化的代碼,將代碼拆分成多個(gè)小的模塊化的代碼片段,非常適合JavaScript類庫,插件,和應(yīng)用的開發(fā)。還有一個(gè)優(yōu)點(diǎn)(Tree Shaking),就是rollup可以按需打包代碼,對于系統(tǒng)中引入了但是沒有使用的代碼,不會(huì)打包到最終文件中。

rollup快速入口:官網(wǎng)、GitHub

快速開始

開始之前,需要做一些準(zhǔn)備:

安裝了nodejsnpm(或者你也可以使用yarn

了解ES6modules的概念

熟練使用命令行工具

熟悉gulp,webpack(不熟悉也無妨)

首先,需要把rollup安裝到全局空間:

 npm install --global rollup  (或者使用縮寫:npm i -g rollup)

全局安裝rollup之后,就可以使用配置文件的命令行接口或者使用JavaScript API接口來打包JavaScript代碼。

使用命令行

假設(shè)你要打包的入口文件是main.js,想要把main.js里引入的所有文件都打包成bundle.js。

Rollup提供了多種打包方式,通過format屬性可以設(shè)置你想要打包成的代碼類型:

amd - 輸出成AMD模塊規(guī)則,RequireJS可以用

cjs - CommonJS規(guī)則,適合Node,BrowserifyWebpack

es - 默認(rèn)值,不改變代碼

iife - 輸出自執(zhí)行函數(shù),最適合導(dǎo)入html中的script標(biāo)簽,且代碼更小

umd - 通用模式,amd,cjs,iife都能用

根據(jù)使用場景,配置不同的format屬性來打包文件。

瀏覽器使用:

# 編譯成一個(gè)自執(zhí)行函數(shù),可以直接在 html 中的 script 標(biāo)簽直接引入
$ rollup main.js --format iife --output bundle.js

Nodejs使用:

# 編譯成 CommonJS 模塊
$ rollup main.js --format cjs --output bundle.js

瀏覽器和Nodejs通用:

# UMD 模式需要設(shè)置一個(gè)大報(bào)名
$ rollup main.js --format umd --name "myBundle" --output bundle.js
使用配置文件,來rollup一個(gè)項(xiàng)目

開始之前,先在本地創(chuàng)建一個(gè)項(xiàng)目,并在根目錄通過 npm init 創(chuàng)建一個(gè)package.json文件,構(gòu)建一個(gè)用npm來管理依賴的項(xiàng)目。

rollup安裝到項(xiàng)目本地:

npm i --save-dev rollup   //--save-dev表示將rollup安裝到開發(fā)環(huán)境依賴中
創(chuàng)建 rollup.config.js

在項(xiàng)目根目錄下創(chuàng)建rollup的配置文件,如下:

// rollup.config.js
export default {
  entry: "src/main.js",   //打包入口文件
  format: "iife",         //iife模式,適用于瀏覽器
  sourceMap: true,        //啟用sourcemap
  dest: "dist/bundle.js"  //等價(jià)于 --output,打包目標(biāo)文件
};
創(chuàng)建文件src/main.js,編寫入口文件,文件中使用了ES6中的class語法。
//src/main.js

class Customer {
    constructor(name) {
        this.name = name;
    }

    sayHi() {
        console.log(`The name is: ${this.name}`)
        console.info(`foo"s Uppercase: ${_.upperCase("foo")}`)
    }
}

let kevin = new Customer("kevin");

kevin.sayHi();
配置package.json的scripts
{
  "scripts": {
    "build": "rollup -c" //-c參數(shù)全稱是 --config,表示使用配置文件
  }
}
自定義使用rollup配置文件

上面的build命令:rollup -c 會(huì)默認(rèn)使用項(xiàng)目根目錄下的 rollup.config.js 作為項(xiàng)目的rollup配置文件。如果你想自定義使用其他文件作為配置文件,可以通過參數(shù)來指定文件。當(dāng)對一個(gè)應(yīng)用系統(tǒng)針對不同環(huán)境配置多個(gè)配置文件的時(shí)候特別適用。如下,對開發(fā)環(huán)境和生產(chǎn)環(huán)境分別使用兩套配置文件進(jìn)行項(xiàng)目的配置。

rollup --config rollup.config.dev.js
rollup --config rollup.config.prod.js

//或者,使用簡寫
rollup -c rollup.config.dev.js
rollup -c rollup.config.prod.js
build項(xiàng)目

配置好上面的內(nèi)容,就可以開始對 src/main.js 進(jìn)行打包了。

在命令行中,項(xiàng)目根目錄下,執(zhí)行命令:

npm run build

執(zhí)行完之后,會(huì)看到項(xiàng)目根目錄下,生成了一個(gè)新的目錄:dist。在 dist目錄下,有兩個(gè)文件,分別是打包之后的js文件:bundle.jsbundle.js對應(yīng)的map文件:bundle.js.map。

打開bundle.js文件,看到代碼如下:

(function () {
"use strict";

class Customer {
    constructor(name) {
        this.name = name;
    }

    sayHi() {
        console.log(`The name is: ${this.name}`);
    }
}

let kevin = new Customer("kevin");

kevin.sayHi();

}());
//# sourceMappingURL=bundle.js.map

可以看到,rollup將我們的 src/main.js 打包成了一個(gè)新的js文件,并給它套上了一個(gè)自執(zhí)行函數(shù),文件最后有對應(yīng)的map文件映射聲明。

添加babel

在上一步中,可以看到rollup將代碼很好的進(jìn)行了打包處理。但是,我們在main.js中用的是ES6的語法,打包之后還是ES6的語法,由于目前瀏覽器還不能很好的兼容ES6中的語法,所以,要想讓我們的代碼在瀏覽器中完美的運(yùn)行,需要使用babelES6的語法轉(zhuǎn)換成ES5的語法。

為了能很好的創(chuàng)建大型應(yīng)用,拓展第三方插件等,rollup提供了對第三方插件的支持,在配置文件中添加plugins來實(shí)現(xiàn)插件的引入。

要添加babel,需要引入插件 rollup-plugin-babel,使用npm來安裝:

npm i -D rollup-plugin-babel --save-dev

除了babel插件,還需要安裝ES6的語法插件 babel-preset-es2015-rollup

npm i -D babel-preset-es2015-rollup --save-dev

在項(xiàng)目的根目錄下創(chuàng)建babe的配置文件 .babelrc

//.babelrc
{
  "presets": [
    ["latest", {
      "es2015": {
        "modules": false
      }
    }]
  ],
  "plugins": ["external-helpers"]
}

準(zhǔn)備好上述內(nèi)容,就查最后一步,引入babel轉(zhuǎn)換器了。修改rollup的配置文件如下:

import babel from "rollup-plugin-babel";

export default {
    entry: "src/main.js",
    format: "iife",
    dest: "dist/bundle.js",
    sourceMap: true,
    plugins: [
        babel({
          exclude: "node_modules/**"
        })
    ]
}

修改好配置文件之后,執(zhí)行一次npm run build,再重新查看dist/bundle.js

(function () {
"use strict";

var classCallCheck = function (instance, Constructor) {
  if (!(instance instanceof Constructor)) {
    throw new TypeError("Cannot call a class as a function");
  }
};

var createClass = function () {
  function defineProperties(target, props) {
    for (var i = 0; i < props.length; i++) {
      var descriptor = props[i];
      descriptor.enumerable = descriptor.enumerable || false;
      descriptor.configurable = true;
      if ("value" in descriptor) descriptor.writable = true;
      Object.defineProperty(target, descriptor.key, descriptor);
    }
  }

  return function (Constructor, protoProps, staticProps) {
    if (protoProps) defineProperties(Constructor.prototype, protoProps);
    if (staticProps) defineProperties(Constructor, staticProps);
    return Constructor;
  };
}();

var Customer = function () {
    function Customer(name) {
        classCallCheck(this, Customer);

        this.name = name;
    }

    createClass(Customer, [{
        key: "sayHi",
        value: function sayHi() {
            console.log("The name is: " + this.name);
        }
    }]);
    return Customer;
}();

var kevin = new Customer("kevin");

kevin.sayHi();

}());
//# sourceMappingURL=bundle.js.map

可以看到,bundle.js中已經(jīng)是轉(zhuǎn)換成ES5之后的代碼了。

更多的插件 在開發(fā)項(xiàng)目的過程中,需要引入一個(gè)json文件,可以引入插件rollup-plugin-json
npm i --save-dev rollup-plugin-json

更新rollup配置文件:

    import json from "rollup-plugin-json";
    
    //更新`plugins`屬性
    plugins: [
        babel({
          exclude: "node_modules/**"
        }),
        json()
    ]
如果你想要在項(xiàng)目中引入外部模塊,你需要rollup-plugin-node-resolve
npm install --save-dev rollup-plugin-node-resolve

更新rollup配置文件:

    //引入插件
    import resolve from "rollup-plugin-node-resolve";
    
    //更新`plugins`屬性
    plugins: [
        resolve(),
        babel({
          exclude: "node_modules/**"
        }),
        json()
    ]
rollup-plugin-commonjs

一些類庫導(dǎo)出的是ES6語法的代碼,但是在npm上大部分模塊都是以CommonJS模式輸入模塊,所以在rollup上處理這些模塊之前,我們需要將代碼從CommonJS轉(zhuǎn)換成ES6。

這個(gè)時(shí)候,就需要安裝插件rollup-plugin-commonjs。

需要注意的是,為了避免這種轉(zhuǎn)換破壞代碼結(jié)構(gòu),rollup-plugin-commonjs的需要在其他插件之前執(zhí)行。

rollup-plugin-uglify

要想讓打包的文件更小,還需要一個(gè)uglify插件:rollup-plugin-uglify。

npm install --save-dev rollup-plugin-uglify

更新rollup配置文件:

    //引入插件
    import uglify from "rollup-plugin-uglify";
    
    //更新`plugins`屬性
    plugins: [
        resolve(),
        babel({
          exclude: "node_modules/**"
        }),
        json(),
        uglify()
    ]

本次配置示例代碼已放在GitHub上,點(diǎn)我查看

(待續(xù)。。。)

//TODO 
* 使用rollup引入同級(jí)依賴類庫
* vue項(xiàng)目開發(fā)環(huán)境配置
* react開發(fā)環(huán)境配置

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/83663.html

相關(guān)文章

  • [譯]教程:如何使用Rollup打包JavaScript

    摘要:教程如何使用打包通過這個(gè)系列教程一步一步學(xué)習(xí)如何使用更小更快的取代和打包文件。安裝并且創(chuàng)建配置文件。提示是告訴我們實(shí)際需要哪些插件的集合。通過下面的命令安裝兩個(gè)插件更新然后,引入插件并添加進(jìn)配置注意屬性是為了幫助模塊遷移到的一部分。 教程:如何使用Rollup打包JavaScript 通過這個(gè)系列教程一步一步學(xué)習(xí)如何使用更小更快的Rollup取代webpack和Browserify打包...

    luoyibu 評(píng)論0 收藏0
  • Webpack vs Rollup

    摘要:年月份的時(shí)候,將的構(gòu)建工具換成了。的特點(diǎn)代碼分割有兩種組織模塊依賴的方式,同步和異步。而目前在中大型項(xiàng)目中使用得非常廣泛。更多網(wǎng)易技術(shù)產(chǎn)品運(yùn)營經(jīng)驗(yàn)分享請?jiān)L問網(wǎng)易云社區(qū)。文章來源網(wǎng)易云社區(qū) 本文由作者余伯賢授權(quán)網(wǎng)易云社區(qū)發(fā)布。 2017年4月份的時(shí)候,F(xiàn)acebook將React的構(gòu)建工具換成了Rollup。很多人就有疑問了,Webpack不也是Facebook團(tuán)隊(duì)開發(fā)的嗎,為什么不使用...

    Null 評(píng)論0 收藏0
  • [譯]教程:如何使用Rollup打包樣式文件并添加LiveReload

    摘要:通過這個(gè)教程學(xué)習(xí)如何使用打包工具配合來取代或處理樣式文件。使用這個(gè)命令安裝插件更新。如果你沒有項(xiàng)目的副本,你可以通過這條命令克隆在結(jié)束這個(gè)狀態(tài)下的項(xiàng)目為添加監(jiān)聽插件。在代碼塊內(nèi),添加如下內(nèi)容簡單起見我省略了文件的大部分內(nèi)容 通過這個(gè)教程學(xué)習(xí)如何使用JavaScript打包工具Rollup配合PostCSS來取代Grunt或Gulp處理樣式文件。 上一篇文章中,我們完成了使用Rollup...

    garfileo 評(píng)論0 收藏0
  • React文檔翻譯系列()安裝

    摘要:文檔翻譯系列一安裝原文地址原文本系列是針對文檔進(jìn)行的翻譯,因?yàn)樽约涸趯W(xué)習(xí)的時(shí)候,最開始通過看博客或者論壇等中文資料,有些內(nèi)容是零零散散的接收,并沒有給自己帶來很好的效果,所以后來決定把文檔的原文從頭到尾看一遍。 React文檔翻譯系列(一)安裝 原文地址:原文 本系列是針對React文檔進(jìn)行的翻譯,因?yàn)樽约涸趯W(xué)習(xí)react的時(shí)候,最開始通過看博客或者論壇等中文資料,有些內(nèi)容是零零散散的...

    Fourierr 評(píng)論0 收藏0
  • 前端學(xué)習(xí)路線

    摘要:具體來說,包管理器就是可以通過命令行,幫助你把外部庫和插件放到你的項(xiàng)目里面并在之后進(jìn)行版本升級(jí),這樣就不用手工復(fù)制和更新庫。現(xiàn)在有的包管理器主要是和。 一、基礎(chǔ) 1、學(xué)習(xí)HTML基礎(chǔ) HTML給你的網(wǎng)頁賦予了結(jié)構(gòu)。它就像是人的骨架那樣讓你保持站立。首先你需要去學(xué)習(xí)語法以及它必須提供的一切。你的學(xué)習(xí)應(yīng)該聚焦在下面這些東西上: 學(xué)習(xí)HTML基礎(chǔ),了解如何編寫語義HTML 理解如何把網(wǎng)頁分...

    FullStackDeveloper 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<