摘要:瀏覽器使用編譯成一個自執行函數,可以直接在中的標簽直接引入使用編譯成模塊瀏覽器和通用模式需要設置一個大報名使用配置文件,來一個項目開始之前,先在本地創建一個項目,并在根目錄通過創建一個文件,構建一個用來管理依賴的項目。
什么是Rollup?
前端項目工程化構建工具也發展好幾年了,生態演化,慢慢發展出了很多好的構建項目的工具,從最開始的grunt,gulp到webpack,前端的工程化越來越方便,給前端帶到了一個美好的時代。
目前,社區中比較火的一個構建工具,是rollup,用rollup來打包模塊化的JavaScript代碼非常的便利。它使用ES6中的新的語法標準來打包模塊化的代碼,將代碼拆分成多個小的模塊化的代碼片段,非常適合JavaScript類庫,插件,和應用的開發。還有一個優點(Tree Shaking),就是rollup可以按需打包代碼,對于系統中引入了但是沒有使用的代碼,不會打包到最終文件中。
rollup快速入口:官網、GitHub
快速開始開始之前,需要做一些準備:
安裝了nodejs和npm(或者你也可以使用yarn)
了解ES6中modules的概念
熟練使用命令行工具
熟悉gulp,webpack(不熟悉也無妨)
首先,需要把rollup安裝到全局空間:
npm install --global rollup (或者使用縮寫:npm i -g rollup)
全局安裝rollup之后,就可以使用配置文件的命令行接口或者使用JavaScript API接口來打包JavaScript代碼。
使用命令行假設你要打包的入口文件是main.js,想要把main.js里引入的所有文件都打包成bundle.js。
Rollup提供了多種打包方式,通過format屬性可以設置你想要打包成的代碼類型:
amd - 輸出成AMD模塊規則,RequireJS可以用
cjs - CommonJS規則,適合Node,Browserify,Webpack 等
es - 默認值,不改變代碼
iife - 輸出自執行函數,最適合導入html中的script標簽,且代碼更小
umd - 通用模式,amd,cjs,iife都能用
根據使用場景,配置不同的format屬性來打包文件。
瀏覽器使用:
# 編譯成一個自執行函數,可以直接在 html 中的 script 標簽直接引入 $ rollup main.js --format iife --output bundle.js
Nodejs使用:
# 編譯成 CommonJS 模塊 $ rollup main.js --format cjs --output bundle.js
瀏覽器和Nodejs通用:
# UMD 模式需要設置一個大報名 $ rollup main.js --format umd --name "myBundle" --output bundle.js使用配置文件,來rollup一個項目
開始之前,先在本地創建一個項目,并在根目錄通過 npm init 創建一個package.json文件,構建一個用npm來管理依賴的項目。
將rollup安裝到項目本地:
npm i --save-dev rollup //--save-dev表示將rollup安裝到開發環境依賴中創建 rollup.config.js
在項目根目錄下創建rollup的配置文件,如下:
// rollup.config.js export default { entry: "src/main.js", //打包入口文件 format: "iife", //iife模式,適用于瀏覽器 sourceMap: true, //啟用sourcemap dest: "dist/bundle.js" //等價于 --output,打包目標文件 };
//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();
{ "scripts": { "build": "rollup -c" //-c參數全稱是 --config,表示使用配置文件 } }
上面的build命令:rollup -c 會默認使用項目根目錄下的 rollup.config.js 作為項目的rollup配置文件。如果你想自定義使用其他文件作為配置文件,可以通過參數來指定文件。當對一個應用系統針對不同環境配置多個配置文件的時候特別適用。如下,對開發環境和生產環境分別使用兩套配置文件進行項目的配置。
rollup --config rollup.config.dev.js rollup --config rollup.config.prod.js //或者,使用簡寫 rollup -c rollup.config.dev.js rollup -c rollup.config.prod.jsbuild項目
配置好上面的內容,就可以開始對 src/main.js 進行打包了。
在命令行中,項目根目錄下,執行命令:
npm run build
執行完之后,會看到項目根目錄下,生成了一個新的目錄:dist。在 dist目錄下,有兩個文件,分別是打包之后的js文件:bundle.js 和 bundle.js對應的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 打包成了一個新的js文件,并給它套上了一個自執行函數,文件最后有對應的map文件映射聲明。
添加babel在上一步中,可以看到rollup將代碼很好的進行了打包處理。但是,我們在main.js中用的是ES6的語法,打包之后還是ES6的語法,由于目前瀏覽器還不能很好的兼容ES6中的語法,所以,要想讓我們的代碼在瀏覽器中完美的運行,需要使用babel將ES6的語法轉換成ES5的語法。
為了能很好的創建大型應用,拓展第三方插件等,rollup提供了對第三方插件的支持,在配置文件中添加plugins來實現插件的引入。
要添加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
在項目的根目錄下創建babe的配置文件 .babelrc:
//.babelrc { "presets": [ ["latest", { "es2015": { "modules": false } }] ], "plugins": ["external-helpers"] }
準備好上述內容,就查最后一步,引入babel轉換器了。修改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/**" }) ] }
修改好配置文件之后,執行一次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中已經是轉換成ES5之后的代碼了。
更多的插件 在開發項目的過程中,需要引入一個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() ]如果你想要在項目中引入外部模塊,你需要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
一些類庫導出的是ES6語法的代碼,但是在npm上大部分模塊都是以CommonJS模式輸入模塊,所以在rollup上處理這些模塊之前,我們需要將代碼從CommonJS轉換成ES6。
這個時候,就需要安裝插件rollup-plugin-commonjs。
需要注意的是,為了避免這種轉換破壞代碼結構,rollup-plugin-commonjs的需要在其他插件之前執行。
rollup-plugin-uglify要想讓打包的文件更小,還需要一個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上,點我查看
(待續。。。)
//TODO * 使用rollup引入同級依賴類庫 * vue項目開發環境配置 * react開發環境配置
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/83663.html
摘要:教程如何使用打包通過這個系列教程一步一步學習如何使用更小更快的取代和打包文件。安裝并且創建配置文件。提示是告訴我們實際需要哪些插件的集合。通過下面的命令安裝兩個插件更新然后,引入插件并添加進配置注意屬性是為了幫助模塊遷移到的一部分。 教程:如何使用Rollup打包JavaScript 通過這個系列教程一步一步學習如何使用更小更快的Rollup取代webpack和Browserify打包...
摘要:年月份的時候,將的構建工具換成了。的特點代碼分割有兩種組織模塊依賴的方式,同步和異步。而目前在中大型項目中使用得非常廣泛。更多網易技術產品運營經驗分享請訪問網易云社區。文章來源網易云社區 本文由作者余伯賢授權網易云社區發布。 2017年4月份的時候,Facebook將React的構建工具換成了Rollup。很多人就有疑問了,Webpack不也是Facebook團隊開發的嗎,為什么不使用...
摘要:通過這個教程學習如何使用打包工具配合來取代或處理樣式文件。使用這個命令安裝插件更新。如果你沒有項目的副本,你可以通過這條命令克隆在結束這個狀態下的項目為添加監聽插件。在代碼塊內,添加如下內容簡單起見我省略了文件的大部分內容 通過這個教程學習如何使用JavaScript打包工具Rollup配合PostCSS來取代Grunt或Gulp處理樣式文件。 上一篇文章中,我們完成了使用Rollup...
摘要:文檔翻譯系列一安裝原文地址原文本系列是針對文檔進行的翻譯,因為自己在學習的時候,最開始通過看博客或者論壇等中文資料,有些內容是零零散散的接收,并沒有給自己帶來很好的效果,所以后來決定把文檔的原文從頭到尾看一遍。 React文檔翻譯系列(一)安裝 原文地址:原文 本系列是針對React文檔進行的翻譯,因為自己在學習react的時候,最開始通過看博客或者論壇等中文資料,有些內容是零零散散的...
摘要:具體來說,包管理器就是可以通過命令行,幫助你把外部庫和插件放到你的項目里面并在之后進行版本升級,這樣就不用手工復制和更新庫。現在有的包管理器主要是和。 一、基礎 1、學習HTML基礎 HTML給你的網頁賦予了結構。它就像是人的骨架那樣讓你保持站立。首先你需要去學習語法以及它必須提供的一切。你的學習應該聚焦在下面這些東西上: 學習HTML基礎,了解如何編寫語義HTML 理解如何把網頁分...
閱讀 1660·2021-11-12 10:35
閱讀 1611·2021-08-03 14:02
閱讀 2655·2019-08-30 15:55
閱讀 2024·2019-08-30 15:54
閱讀 735·2019-08-30 14:01
閱讀 2421·2019-08-29 17:07
閱讀 2246·2019-08-26 18:37
閱讀 3028·2019-08-26 16:51