GitHub: https://github.com/zeit/ncc
ncc 是一個簡單的 CLI 工具,可以一鍵把一個 Node.js 項目編譯打包成單個 JS 文件。
安裝
npm i -g @zeit/ncc
使用
例如我們有一個項目引入了 chalk 包,首先安裝 NPM 依賴:
cd myapp
npm i chalk
index.js 如下:
const chalk = require("chalk");
console.log(chalk.blue.bgRed.bold("Hello world!"));
那么就可以直接用 ncc build:
ncc build index.js
即會輸出一個 dist/index.js 文件(打包+壓縮):
我們通過ncc將我們的npm包,打包成一個JS文件.
然后我們發布的 npm 包,package.json 里面的 dependencies 也不需要去加對應的依賴,npm安裝的時候,也就不用去安裝對應的依賴了。
這樣的好處:
- 將依賴包都固定在發包時刻的包里面的內容,其他包再發包,也不影響我們,因為我們最終發的是ncc的產物。
- 安裝速度變快了,比如原來的模式xxx依賴A,B,C,A又可能引用別的包。最終可能安裝一個包,實際安裝了幾十個包或者上百個包。現在只需要安裝1個。
- 安裝的結果是變少了,比如原來 node_modules 可能占用了50M,現在你可能只要安裝 900KB 的東西,硬盤不會因為前端項目太多,導致node_modules大量占用空間了。
- 啟動速度也能變快,因為原來xxx模塊,會去引用A,B,C,都是需要走 require 的流程,這個過程就會耗費一些時間
相關提問
1、ncc跟pkg有什么區別?
ncc生成的產物是 java文件(text),而pkg工具的產物是binary的可執行文件(binary),ncc的產物,我們還需要借助 node xxx.js 運行,而pkg的產物自帶運行時,因此在宿主機未安裝Node的情況下也可以運行。兩者有相同之處,也有各自的應用場景。
