天天看點

npm 常用配置

npm config list/ls

 顯示配置資訊

npm config list/ls -l

 更詳細

npm -h

 顯示幫助資訊,建議多檢視

npm -l

 display full usage info ;-l is --long

npm <cmd> -h

 顯示某個指令的幫助資訊

npm help npm

npm help <term>

npm config set prefix path

 修改npm全局安裝目錄

npm config set cache path

 修改npm cache目錄

把新的npm路徑修改到系統環境變量中,才可生效

npm config set registry='https://registry.npm.taobao.org/'

 設定npm資源鏡像,加快下載下傳安裝速度,還有其他鏡像

npm ls

 顯示工程目錄下本地安裝的包,--depth=0,顯示初級依賴層次

npm -g ls

 顯示全局安裝的包

npm i/install --save xxx

 安裝包資訊将加入到dependencies(生産階段的依賴)

npm i/install --save-dev xxx

 安裝包資訊将加入到devDependencies(開發階段的依賴),是以開發階段一般使用它

npm i --save-exact xxx

 精确安裝包版本,package.json裡的依賴包的value是具體的版本号,前邊沒有符号

npm root

 檢視包的安裝路徑,及node_modules的路徑

npm view modulename

 檢視子產品的package.json資訊

npm view moudleName dependencies

 檢視包的依賴關系

npm view moduleName repository.url

 檢視包的源檔案位址

npm view moduleName engines

 檢視包所依賴的node版本

npm outdated

 檢測顯示過時的包

npm update

 更新包

npm uninstall

 解除安裝包

npm init

 在項目中引導建立一個package.json檔案

縮寫選項:

Shorthands and Other CLI Niceties

The following shorthands are parsed on the command-line:

-v: --version

-h, -?, --help, -H: --usage

-s, --silent: --loglevel silent

-q, --quiet: --loglevel warn

-d: --loglevel info

-dd, --verbose: --loglevel verbose

-ddd: --loglevel silly

-g: --global

-C: --prefix

-l: --long

-m: --message

-p, --porcelain: --parseable

-reg: --registry

-f: --force

-desc: --description

-S: --save

-D: --save-dev

-O: --save-optional

-B: --save-bundle

-E: --save-exact

-y: --yes

-n: --yes false

ll and la commands: ls --long

npm scripts

參考多個網絡資源:

  • http://www.xiaocaoge.com/build-with-npm-scripts.html?utm_source=tuicool&utm_medium=referral
  • http://www.open-open.com/lib/view/open1487819024678.html
  • http://www.ruanyifeng.com/blog/2016/10/npm_scripts.html

npm scripts 是指npm對于package.json檔案中"scripts"屬性的處理,通過該屬性,npm 可以執行指令。

使用不帶參數的

npm run

,顯示package.json裡所有的script腳本指令及内容。

npm run

 會建立一個新的shell,執行指定的指令,并将node_modules/.bin 加入 PATH 變量。當腳本内容結束,則子 shell 關閉,回到父 shell 中。

由于 npm 腳本的唯一要求就是可以在 Shell 執行,是以它不一定是 Node 腳本,任何可執行檔案都可以寫在裡面。

npm 腳本的退出碼,也遵守 Shell 腳本規則。如果退出碼不是0,npm 就認為這個腳本執行失敗。

向npm run xx傳入參數必須用

--

表明

執行順序:

$npm run xx & npm run xxx

同時并行執行

$npm run xx && npm run xxx

 前一個執行成功,再執行最後一個

例如:

{
    "scripts": {
        "lint": "eslint"
    }
}           

複制

目錄終端中,執行

npm run-script lint

啟動lint指令,也可簡化為

npm run lint

;實際是執行了node_modules/.bin/eslint。

項目目錄下的node_modules/.bin/目錄專門存放安裝包的可執行程式。

内置的幾個npm 指令

  • start: 執行 npm start
  • test: 執行 npm test
  • stop: 執行 npm stop
  • restart: 執行 npm restart。npm restart是一個複合指令,實際上會依次執行三個腳本指令:stop、restart、start。prerestart>prestop>stop>poststop>restart>prestart>start>poststart>postrestart

pre 和 post hooks

雙重的pre和post無效,比如prepretest和postposttest是無效的。

{
    "scripts":{
        'prexxx':,
        'xxx':,
        'postxxx':,
    }
}           

複制

執行

npm run xxx

後,預設執行順序:npm run prexxx > npm run xxx > npm run postxxx

一些内置的指令如:start ,執行npm start,會預設執行: npm run prestart > npm run start > npm run poststart。詳見官網

{
    "scripts":{
        "build:dev":"xxxx",//npm run build:dev
        "build:prod":"xxx"//npm run build:prod
    }
}           

複制

環境變量

通過npm_package_字首,npm 腳本可以拿到package.json裡面的字段

若package.json中有{"version":xxx,"name":xx},則npm 在scripts中添加環境變量: npm_package_name 和 npm_package_version。

在*.js檔案中可以使用

process.env.npm_package_xxx

引入

還可自定義變量:

config 字段也可以用于設定内部字段

{
    "config": {
        "port": 1111
    }
    //則scripts中可以引入
    "scripts":{//bash腳本
        "xxx":"xxx ${npm_package_config_port}/$npm_package_config_port"
    }
}           

複制

npm_lifecycle_event

npm 正在執行哪個script,npm_lifecycle_event就傳回目前正在運作的腳本名稱。

為什麼使用 npm Scripts 建構項目

參考連結,這裡摘抄幾點:

Gulp 與 Grunt 的不足

總得來說就是 Gulp 與 Grunt 引入了一層複雜但是多餘的抽象層,用來抽象直接的建構指令,比如gulp-uglify和grunt-contrib-uglify用來包裝uglifyjs指令。這層抽象所建立的插件生态帶來了很多問題:

額外的抽象,帶來了額外的學習成本;

插件依賴作者,無論是插件品質、設計合理性、文檔、更新及時性等嚴重依賴作者自身的水準與投入;

為什麼 npm scripts 先前使用的人不多?這可能是因為很多人存在對 npm scripts 的誤解:

人們認為 npm scripts 需要熟悉指令行技能;

人們認為 npm scripts 不夠強大;

人們認為 Gulp 的流(stream)對于快速建構是必須的;

人們認為 npm scripts 不能跨平台;

而真相是:

npm scripts 并不需要熟悉指令行技能,當然熟悉的話更好;

npm scripts 可以完成絕大多數 Grunt 與 Gulp 完成的任務,實在不行還可以寫 NodeJS 代碼來完成;

因為 npm scripts 在一個 Shell 環境中執行的,而 Shell 天生支援流;

幾個常見的指令操作符&&/</>/|是跨平台的,對于一些 Linux/Mac 中的 Shell 指令可以使用 shelljs 來實作跨平台;

而 npm scripts 的不足是由于package.json檔案不可以寫注釋,對于複雜的建構任務,代碼可讀性很差。這個可以盡量通過貼切的命名,任務細分來減輕。另外就是需要熟悉各建構工具的指令行使用方式。