亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

使用rollup打包JS的方法步驟

2024-05-06 16:47:02
字體:
來源:轉載
供稿:網友

rollup 采用 es6 原生的模塊機制進行模塊的打包構建,rollup 更著眼于未來,對 commonjs 模塊機制不提供內置的支持,是一款更輕量的打包工具。rollup 比較適合打包 js 的 sdk 或者封裝的框架等,例如,vue 源碼就是 rollup 打包的。而 webpack 比較適合打包一些應用,例如 SPA 或者同構項目等等。

創建項目

目錄結構是這樣的:

hey-rollup/├── dist│  ├── bundle-name.js│  └── bundle-name.min.js├── example│  ├── dist│  │  └── example.js│  ├── index.html│  └── index.js├── package-lock.json├── package.json├── rollup.config.js├── src│  └── index.js└── test  └── index.js

你可以在你的終端中執行下面的命令來安裝此項目

# cd /path/to/your/projectsgit clone https://github.com/daixwu/hey-rollup.git

安裝 Rollup

通過下面的命令安裝Rollup:

npm install --save-dev rollup

創建配置文件

在 hey-rollup 文件夾中創建一個新文件 rollup.config.js。之后在文件中添加下面的內容:

export default { input: "src/main.js", output: {  file: "dist/js/main.min.js",  format: "umd",  name: 'bundle-name' }};

下面是每一個配置選項都做了些什么:

  • input —— 要打包的文件
  • output.file —— 輸出的文件 (如果沒有這個參數,則直接輸出到控制臺)
  • output.format —— Rollup 輸出的文件類型 (amd, cjs, es, iife, umd)
    • amd – 異步模塊定義,用于像 RequireJS 這樣的模塊加載器
    • cjs – CommonJS,適用于 Node 和 Browserify/Webpack
    • es – 將軟件包保存為 ES 模塊文件
    • iife – 一個自動執行的功能,適合作為 <script> 標簽。(如果要為應用程序創建一個捆綁包,您可能想要使用它,因為它會使文件大小變小。)
  • umd – 通用模塊定義,以 amd,cjs 和 iife 為一體
  • output.name --生成包名稱,代表你的 iife/umd 包,同一頁上的其他腳本可以訪問它(iife/umd 沒有 name 會報錯的)

搭配 babel 7

rollup 的模塊機制是 ES6 Modules,但并不會對 es6 其他的語法進行編譯。因此如果要使用 es6 的語法進行開發,還需要使用 babel 來幫助我們將代碼編譯成 es5。

這種強需求,rollup 當然提供了解決方案。

安裝模塊

rollup-plugin-babel 將 rollup 和 babel 進行了完美結合。

npm install --save-dev rollup-plugin-babel@latest

創建 .babelrc

{  "presets": [   [    "@babel/preset-env",    {     "modules": false    }   ]  ]}

更新 rollup.config.js

import babel from "rollup-plugin-babel";export default { plugins: [  babel({   exclude: 'node_modules/**',  }), ],};

為了避免轉譯第三方腳本,我們需要設置一個 exclude 的配置選項來忽略掉 node_modules 目錄

babel 7 必要模塊

npm install --save-dev @babel/corenpm install --save-dev @babel/preset-env

ESLint 檢查

在你的代碼中使用 linter 無疑是十分好的決定,因為它會強制執行一致的編碼規范來幫助你捕捉像是漏掉了括弧這種棘手的 bug。

在這個項目中,我們將會使用 ESLint。

安裝模塊

為了使用 ESLint,我們將要安裝 ESLint Rollup plugin

npm install --save-dev rollup-plugin-eslint

生成一個 .eslintrc.json

為了確保我們只獲取我們想要的錯誤,我們需要首先配置 ESLint。這里可以通過下面的代碼來自動生成大多數配置:

./node_modules/.bin/eslint --init

更新 rollup.config.js

接下來,import ESLint 插件并將它添加到 Rollup 配置中:

import eslint from 'rollup-plugin-eslint';export default { plugins: [  eslint({   exclude: [    throwOnError: true,    throwOnWarning: true,    include: ['src/**'],    exclude: ['node_modules/**']   ]  }), ],};

eslint插件有兩個屬性需要說明:throwOnError 和 throwOnWarning 設置為 true 時,如果在 eslint 的檢查過程中發現了 error 或warning,就會拋出異常,阻止打包繼續執行(如果設置為false,就只會輸出eslint檢測結果,而不會停止打包)

兼容 commonjs

npm 生態已經繁榮了多年,commonjs 規范作為 npm 的包規范,大量的 npm 包都是基于 commonjs 規范來開發的,因此在完美支持 es6 模塊規范之前,我們仍舊需要兼容 commonjs 模塊規范。

rollup 提供了插件rollup-plugin-commonjs ,以便于在 rollup 中引用 commonjs 規范的包。該插件的作用是將 commonjs 模塊轉成 es6 模塊。

rollup-plugin-commonjs 通常與 rollup-plugin-node-resolve 一同使用,后者用來解析依賴的模塊路徑。

安裝模塊

npm install --save-dev rollup-plugin-commonjs rollup-plugin-node-resolve

更新 rollup.config.js

import babel from 'rollup-plugin-babel';import resolve from 'rollup-plugin-node-resolve';import commonjs from 'rollup-plugin-commonjs';export default { plugins: [  resolve({   jsnext: true,   main: true,   browser: true,  }),  commonjs(),  babel({   exclude: 'node_modules/**',  }), ],};

注意: jsnext 表示將原來的 node 模塊轉化成 ES6 模塊,main 和 browser 則決定了要將第三方模塊內的哪些代碼打包到最終文件中。

替代環境變量

安裝模塊

rollup-plugin-replace 本質上是一個用來查找和替換的工具。它可以做很多事,但對我們來說只需要找到目前的環境變量并用實際值來替代就可以了。(例如:在 bundle 中出現的所有 ENV 將被 "production" 替換)

npm install --save-dev rollup-plugin-replace

更新 rollup.config.js

配置很簡單:我們可以添加一個 key:value 的配對表,key 值是準備被替換的鍵值,而 value 是將要被替換的值。

import replace from "rollup-plugin-replace";export default { plugins: [  replace({   ENV: JSON.stringify(process.env.NODE_ENV || "development")  }) ]};

在我們的配置中找到每一個 ENV 并用 process.env.NODE_ENV 去替換,SON.stringify 用來確保值是雙引號的,不像 ENV 這樣。

壓縮 bundle

添加 UglifyJS 可以通過移除注上釋、縮短變量名、重整代碼來極大程度的減少 bundle 的體積大小 —— 這樣在一定程度降低了代碼的可讀性,但是在網絡通信上變得更有效率。

安裝插件

用下面的命令來安裝rollup-plugin-uglify :

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

更新 rollup.config.js

接下來,讓我們在 Rollup 配置中添加 Uglify 。然而,為了在開發中使代碼更具可讀性,讓我們來設置只在生產環境中壓縮混淆代碼:

import uglify from "rollup-plugin-uglify";export default { plugins: [  process.env.NODE_ENV === "production" && uglify() ]};

這里使用了短路計算策略,只有在 NODE_ENV 設置為 production 時加載 uglify()。

完整配置

最后附上我的 rollup.config.js 配置

import resolve from 'rollup-plugin-node-resolve';import commonjs from 'rollup-plugin-commonjs';import { eslint } from 'rollup-plugin-eslint';import babel from 'rollup-plugin-babel';import replace from 'rollup-plugin-replace';import { uglify } from 'rollup-plugin-uglify';const packages = require('./package.json');const ENV = process.env.NODE_ENV;const paths = {  input: {    root: ENV === 'example'      ? 'example/index.js'      : 'src/index.js',  },  output: {    root: ENV === 'example'      ? 'example/dist/'      : 'dist/',  },};const fileNames = {  development: `${packages.name}.js`,  example: `example.js`,  production: `${packages.name}.min.js`};const fileName = fileNames[ENV];export default {  input: `${paths.input.root}`,  output: {    file: `${paths.output.root}${fileName}`,    format: 'umd',    name: 'bundle-name'  },  plugins: [    resolve(),    commonjs(),    eslint({      include: ['src/**'],      exclude: ['node_modules/**']    }),    babel({      exclude: 'node_modules/**',      runtimeHelpers: true,    }),    replace({      exclude: 'node_modules/**',      ENV: JSON.stringify(process.env.NODE_ENV),    }),    (ENV === 'production' && uglify()),  ],};

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人黄色大片在线免费观看| 午夜精品一区二区三区视频免费看| 78m国产成人精品视频| 色偷偷91综合久久噜噜| 亚洲精美色品网站| 欧美成人精品三级在线观看| 三级精品视频久久久久| 精品久久中文字幕久久av| 成人h片在线播放免费网站| 国产精品主播视频| 欧美乱妇40p| 国产一区二区美女视频| 精品性高朝久久久久久久| 亚洲黄色免费三级| 亚洲精品一区二区三区不| 91精品国产91久久久久久不卡| 欧美日韩午夜激情| 欧美日韩亚洲视频一区| 欧美亚洲另类激情另类| 亚洲人成网站777色婷婷| 狠狠色香婷婷久久亚洲精品| 亚洲精品福利免费在线观看| 福利一区视频在线观看| 亚洲天堂成人在线视频| 26uuu另类亚洲欧美日本老年| 亚洲精品成人免费| 777精品视频| 亚洲精品午夜精品| 国产精品偷伦视频免费观看国产| 91色视频在线观看| 日韩中文字幕在线精品| 亚洲国产一区二区三区在线观看| 日本久久久a级免费| 国产一区二区三区18| 欧美精品在线观看| 欧美日韩一区二区在线播放| 成人免费激情视频| 一区二区欧美亚洲| 91国产中文字幕| 欧美日本在线视频中文字字幕| 97视频在线观看视频免费视频| 国产精品丝袜久久久久久不卡| 欧美一性一乱一交一视频| 日韩69视频在线观看| 国产v综合v亚洲欧美久久| 91欧美精品成人综合在线观看| 欧美人在线观看| 欧洲一区二区视频| 97精品一区二区三区| 欧美在线激情视频| 91av在线网站| 亚洲国产精品久久久久| 国产免费亚洲高清| 日韩成人在线观看| 国产精品亚洲视频在线观看| 欧美性色xo影院| 国产热re99久久6国产精品| 欧美一区二粉嫩精品国产一线天| 91wwwcom在线观看| 一区二区成人av| 久久久爽爽爽美女图片| 国模私拍视频一区| 亚洲人成毛片在线播放| 正在播放国产一区| 亚洲欧美制服另类日韩| 亚洲日韩第一页| 国产精品成人免费视频| 亚洲成人精品视频| 久久国产精品久久国产精品| 久久精品视频一| 亚洲视频电影图片偷拍一区| 久久久久国产精品免费网站| 日韩中文字幕视频在线观看| 亚洲美女www午夜| 高清欧美性猛交xxxx| 欧美日韩亚洲天堂| 亚洲视频在线观看| 国产日本欧美一区二区三区| 丝袜一区二区三区| 人人爽久久涩噜噜噜网站| 日韩女优在线播放| 91精品在线影院| 成人免费高清完整版在线观看| 668精品在线视频| 麻豆乱码国产一区二区三区| 欧美性猛交xxxx富婆| 午夜欧美大片免费观看| 欧美成人免费小视频| 成人av色在线观看| 国产一区二区在线免费| 国产精品亚洲综合天堂夜夜| 欧美日韩激情视频8区| 国产亚洲欧美日韩精品| 亚洲aⅴ日韩av电影在线观看| 91久久夜色精品国产网站| www.欧美精品| 亚洲国产日韩欧美综合久久| 青青久久av北条麻妃黑人| 日韩欧美中文字幕在线播放| 国产精品久久电影观看| 亚洲色图13p| 久久久久中文字幕2018| 欧美激情2020午夜免费观看| 性色av一区二区三区在线观看| 一级做a爰片久久毛片美女图片| 欧美综合在线观看| 性欧美xxxx交| 亚洲黄页网在线观看| 九九热这里只有在线精品视| 7m精品福利视频导航| 国产欧美日韩中文字幕在线| 亚洲精品日韩久久久| 午夜精品视频在线| 日韩欧美成人区| 91香蕉国产在线观看| 欧美日韩免费网站| 国产精品都在这里| 欧洲中文字幕国产精品| 亚洲欧美日韩区| 91精品视频网站| 欧美日本高清一区| 国产亚洲a∨片在线观看| 国产在线视频一区| 国产欧美日韩丝袜精品一区| 国产精品aaaa| 久久乐国产精品| 国产亚洲免费的视频看| 岛国av一区二区在线在线观看| 国产亚洲精品久久久久久777| 日韩av手机在线观看| 国产精品专区h在线观看| 久久久久国色av免费观看性色| 国产一区二区三区网站| 国外色69视频在线观看| 亚洲www视频| 欧美放荡办公室videos4k| **欧美日韩vr在线| 成人黄色大片在线免费观看| 91久久精品国产91性色| 精品av在线播放| 在线激情影院一区| 中文字幕v亚洲ⅴv天堂| 久久久久日韩精品久久久男男| 韩国视频理论视频久久| 日韩美女在线看| 最近2019免费中文字幕视频三| 中文字幕国产精品| 中文字幕日韩欧美在线| 91精品中文在线| 97精品久久久中文字幕免费| 4444欧美成人kkkk| 亚洲老司机av| 尤物九九久久国产精品的特点| 91成人性视频| 久久99久久亚洲国产| 欧美日韩加勒比精品一区| 在线亚洲男人天堂| 国产精品精品视频一区二区三区| 韩国日本不卡在线| 青青草99啪国产免费| 成人激情在线观看| 中文字幕久久久av一区| 久久精品亚洲94久久精品| 欧美国产视频一区二区|