npm 使用過程當中報錯問題-及npm使用

原文地址:https://blog.csdn.net/u013022210/article/details/77740519javascript

1.如下爲報錯具體詳情;node 8.1.2 版本問題:其餘空間安裝成功可是安裝webpack 老是報如下錯誤:解決辦法爲從新安裝nodecss

 

 

2.html

npm模塊管理器

來自《JavaScript 標準參考教程(alpha)》,by 阮一峯java

目錄

簡介

npm有兩層含義。一層含義是Node的開放式模塊登記和管理系統,網址爲npmjs.org。另外一層含義是Node默認的模塊管理器,是一個命令行下的軟件,用來安裝和管理Node模塊。node

npm不須要單獨安裝。在安裝Node的時候,會連帶一塊兒安裝npm。可是,Node附帶的npm可能不是最新版本,最好用下面的命令,更新到最新版本。webpack

$ npm install npm@latest -g

上面的命令中,@latest表示最新版本,-g表示全局安裝。因此,命令的主幹是npm install npm,也就是使用npm安裝本身。之因此能夠這樣,是由於npm自己與Node的其餘模塊沒有區別。git

而後,運行下面的命令,查看各類信息。github

# 查看 npm 命令列表 $ npm help # 查看各個命令的簡單用法 $ npm -l # 查看 npm 的版本 $ npm -v # 查看 npm 的配置 $ npm config list -l 

npm init

npm init用來初始化生成一個新的package.json文件。它會向用戶提問一系列問題,若是你以爲不用修改默認配置,一路回車就能夠了。web

若是使用了-f(表明force)、-y(表明yes),則跳過提問階段,直接生成一個新的package.json文件。正則表達式

$ npm init -y

npm set

npm set用來設置環境變量。

$ npm set init-author-name 'Your name' $ npm set init-author-email 'Your email' $ npm set init-author-url 'http://yourdomain.com' $ npm set init-license 'MIT' 

上面命令等於爲npm init設置了默認值,之後執行npm init的時候,package.json的做者姓名、郵件、主頁、許可證字段就會自動寫入預設的值。這些信息會存放在用戶主目錄的 ~/.npmrc文件,使得用戶不用每一個項目都輸入。若是某個項目有不一樣的設置,能夠針對該項目運行npm config

$ npm set save-exact true 

上面命令設置加入模塊時,package.json將記錄模塊的確切版本,而不是一個可選的版本範圍。

npm config

$ npm config set prefix $dir 

上面的命令將指定的$dir目錄,設爲模塊的全局安裝目錄。若是當前有這個目錄的寫權限,那麼運行npm install的時候,就再也不須要sudo命令受權了。

$ npm config set save-prefix ~ 

上面的命令使得npm install --savenpm install --save-dev安裝新模塊時,容許的版本範圍從克拉符號(^)改爲波浪號(~),即從容許小版本升級,變成只容許補丁包的升級。

$ npm config set init.author.name $name $ npm config set init.author.email $email 

上面命令指定使用npm init時,生成的package.json文件的字段默認值。

npm info

npm info命令能夠查看每一個模塊的具體信息。好比,查看underscore模塊的信息。

$ npm info underscore { name: 'underscore', description: 'JavaScript\'s functional programming helper library.', 'dist-tags': { latest: '1.5.2', stable: '1.5.2' }, repository: { type: 'git', url: 'git://github.com/jashkenas/underscore.git' }, homepage: 'http://underscorejs.org', main: 'underscore.js', version: '1.5.2', devDependencies: { phantomjs: '1.9.0-1' }, licenses: { type: 'MIT', url: 'https://raw.github.com/jashkenas/underscore/master/LICENSE' }, files: [ 'underscore.js', 'underscore-min.js', 'LICENSE' ], readmeFilename: 'README.md'} 

上面命令返回一個JavaScript對象,包含了underscore模塊的詳細信息。這個對象的每一個成員,均可以直接從info命令查詢。

$ npm info underscore description JavaScript's functional programming helper library. $ npm info underscore homepage http://underscorejs.org $ npm info underscore version 1.5.2 

npm search命令用於搜索npm倉庫,它後面能夠跟字符串,也能夠跟正則表達式。

$ npm search <搜索詞>

下面是一個例子。

$ npm search node-gyp // NAME DESCRIPTION // autogypi Autogypi handles dependencies for node-gyp projects. // grunt-node-gyp Run node-gyp commands from Grunt. // gyp-io Temporary solution to let node-gyp run `rebuild` under… // ... 

npm list

npm list命令以樹型結構列出當前項目安裝的全部模塊,以及它們依賴的模塊。

$ npm list

加上global參數,會列出全局安裝的模塊。

$ npm list -global

npm list命令也能夠列出單個模塊。

$ npm list underscore

npm install

基本用法

Node模塊採用npm install命令安裝。

每一個模塊能夠「全局安裝」,也能夠「本地安裝」。「全局安裝」指的是將一個模塊安裝到系統目錄中,各個項目均可以調用。通常來講,全局安裝只適用於工具模塊,好比eslintgulp。「本地安裝」指的是將一個模塊下載到當前項目的node_modules子目錄,而後只有在項目目錄之中,才能調用這個模塊。

# 本地安裝 $ npm install <package name> # 全局安裝 $ sudo npm install -global <package name> $ sudo npm install -g <package name> 

npm install也支持直接輸入Github代碼庫地址。

$ npm install git://github.com/package/path.git $ npm install git://github.com/package/path.git#0.1.0 

安裝以前,npm install會先檢查,node_modules目錄之中是否已經存在指定模塊。若是存在,就再也不從新安裝了,即便遠程倉庫已經有了一個新版本,也是如此。

若是你但願,一個模塊不論是否安裝過,npm 都要強制從新安裝,可使用-f--force參數。

$ npm install <packageName> --force

若是你但願,全部模塊都要強制從新安裝,那就刪除node_modules目錄,從新執行npm install

$ rm -rf node_modules $ npm install 

安裝不一樣版本

install命令老是安裝模塊的最新版本,若是要安裝模塊的特定版本,能夠在模塊名後面加上@和版本號。

$ npm install sax@latest $ npm install sax@0.1.1 $ npm install sax@">=0.1.0 <0.2.0" 

若是使用--save-exact參數,會在package.json文件指定安裝模塊的確切版本。

$ npm install readable-stream --save --save-exact

install命令可使用不一樣參數,指定所安裝的模塊屬於哪種性質的依賴關係,即出如今packages.json文件的哪一項中。

  • –save:模塊名將被添加到dependencies,能夠簡化爲參數-S
  • –save-dev: 模塊名將被添加到devDependencies,能夠簡化爲參數-D
$ npm install sax --save $ npm install node-tap --save-dev # 或者 $ npm install sax -S $ npm install node-tap -D 

若是要安裝beta版本的模塊,須要使用下面的命令。

# 安裝最新的beta版 $ npm install <module-name>@beta (latest beta) # 安裝指定的beta版 $ npm install <module-name>@1.3.1-beta.3 

npm install默認會安裝dependencies字段和devDependencies字段中的全部模塊,若是使用--production參數,能夠只安裝dependencies字段的模塊。

$ npm install --production # 或者 $ NODE_ENV=production npm install 

一旦安裝了某個模塊,就能夠在代碼中用require命令加載這個模塊。

var backbone = require('backbone') console.log(backbone.VERSION) 

避免系統權限

默認狀況下,Npm全局模塊都安裝在系統目錄(好比/usr/local/lib/),普通用戶沒有寫入權限,須要用到sudo命令。這不是很方便,咱們能夠在沒有root權限的狀況下,安裝全局模塊。

首先,在主目錄下新建配置文件.npmrc,而後在該文件中將prefix變量定義到主目錄下面。

prefix = /home/yourUsername/npm 

而後在主目錄下新建npm子目錄。

$ mkdir ~/npm

此後,全局安裝的模塊都會安裝在這個子目錄中,npm也會到~/npm/bin目錄去尋找命令。

最後,將這個路徑在.bash_profile文件(或.bashrc文件)中加入PATH變量。

export PATH=~/npm/bin:$PATH 

npm update,npm uninstall

npm update命令能夠更新本地安裝的模塊。

# 升級當前項目的指定模塊 $ npm update [package name] # 升級全局安裝的模塊 $ npm update -global [package name] 

它會先到遠程倉庫查詢最新版本,而後查詢本地版本。若是本地版本不存在,或者遠程版本較新,就會安裝。

使用-S--save參數,能夠在安裝的時候更新package.json裏面模塊的版本號。

// 更新以前的package.json dependencies: { dep1: "^1.1.1" } // 更新以後的package.json dependencies: { dep1: "^1.2.2" } 

注意,從npm v2.6.1 開始,npm update只更新頂層模塊,而不更新依賴的依賴,之前版本是遞歸更新的。若是想取到老版本的效果,要使用下面的命令。

$ npm --depth 9999 update

npm uninstall命令,卸載已安裝的模塊。

$ npm uninstall [package name] # 卸載全局模塊 $ npm uninstall [package name] -global 

npm run

npm不只能夠用於模塊管理,還能夠用於執行腳本。package.json文件有一個scripts字段,能夠用於指定腳本命令,供npm直接調用。

{ "name": "myproject", "devDependencies": { "jshint": "latest", "browserify": "latest", "mocha": "latest" }, "scripts": { "lint": "jshint **.js", "test": "mocha test/" } } 

上面代碼中,scripts字段指定了兩項命令linttest。命令行輸入npm run-script lint或者npm run lint,就會執行jshint **.js,輸入npm run-script test或者npm run test,就會執行mocha test/npm runnpm run-script的縮寫,通常都使用前者,可是後者能夠更好地反應這個命令的本質。

npm run命令會自動在環境變量$PATH添加node_modules/.bin目錄,因此scripts字段裏面調用命令時不用加上路徑,這就避免了全局安裝NPM模塊。

npm run若是不加任何參數,直接運行,會列出package.json裏面全部能夠執行的腳本命令。

npm內置了兩個命令簡寫,npm test等同於執行npm run testnpm start等同於執行npm run start

npm run會建立一個Shell,執行指定的命令,並臨時將node_modules/.bin加入PATH變量,這意味着本地模塊能夠直接運行。

舉例來講,你執行ESLint的安裝命令。

$ npm i eslint --save-dev

運行上面的命令之後,會產生兩個結果。首先,ESLint被安裝到當前目錄的node_modules子目錄;其次,node_modules/.bin目錄會生成一個符號連接node_modules/.bin/eslint,指向ESLint模塊的可執行腳本。

而後,你就能夠在package.jsonscript屬性裏面,不帶路徑的引用eslint這個腳本。

{ "name": "Test Project", "devDependencies": { "eslint": "^1.10.3" }, "scripts": { "lint": "eslint ." } } 

等到運行npm run lint的時候,它會自動執行./node_modules/.bin/eslint .

若是直接運行npm run不給出任何參數,就會列出scripts屬性下全部命令。

$ npm run Available scripts in the user-service package: lint jshint **.js test mocha test/ 

下面是另外一個package.json文件的例子。

"scripts": { "watch": "watchify client/main.js -o public/app.js -v", "build": "browserify client/main.js -o public/app.js", "start": "npm run watch & nodemon server.js", "test": "node test/all.js" }, 

上面代碼在scripts項,定義了四個別名,每一個別名都有對應的腳本命令。

$ npm run watch $ npm run build $ npm run start $ npm run test 

其中,starttest屬於特殊命令,能夠省略run

$ npm start $ npm test 

若是但願一個操做的輸出,是另外一個操做的輸入,能夠借用Linux系統的管道命令,將兩個操做連在一塊兒。

"build-js": "browserify browser/main.js | uglifyjs -mc > static/bundle.js" 

可是,更方便的寫法是引用其餘npm run命令。

"build": "npm run build-js && npm run build-css" 

上面的寫法是先運行npm run build-js,而後再運行npm run build-css,兩個命令中間用&&鏈接。若是但願兩個命令同時平行執行,它們中間能夠用&鏈接。

下面是一個流操做的例子。

"devDependencies": { "autoprefixer": "latest", "cssmin": "latest" }, "scripts": { "build:css": "autoprefixer -b 'last 2 versions' < assets/styles/main.css | cssmin > dist/main.css" } 

寫在scripts屬性中的命令,也能夠在node_modules/.bin目錄中直接寫成bash腳本。下面是一個bash腳本。

#!/bin/bash cd site/main browserify browser/main.js | uglifyjs -mc > static/bundle.js 

假定上面的腳本文件名爲build.sh,而且權限爲可執行,就能夠在scripts屬性中引用該文件。

"build-js": "bin/build.sh" 

參數

npm run命令還能夠添加參數。

"scripts": { "test": "mocha test/" } 

上面代碼指定npm test,實際運行mocha test/。若是要經過npm test命令,將參數傳到mocha,則參數以前要加上兩個連詞線。

$ npm run test -- anothertest.js # 等同於 $ mocha test/ anothertest.js 

上面命令表示,mocha要運行全部test子目錄的測試腳本,以及另一個測試腳本anothertest.js

npm run自己有一個參數-s,表示關閉npm自己的輸出,只輸出腳本產生的結果。

// 輸出npm命令頭
$ npm run test // 不輸出npm命令頭 $ npm run -s test 

scripts腳本命令最佳實踐

scripts字段的腳本命令,有一些最佳實踐,能夠方便開發。首先,安裝npm-run-all模塊。

$ npm install npm-run-all --save-dev

這個模塊用於運行多個scripts腳本命令。

# 繼發執行 $ npm-run-all build:html build:js # 等同於 $ npm run build:html && npm run build:js # 並行執行 $ npm-run-all --parallel watch:html watch:js # 等同於 $ npm run watch:html & npm run watch:js # 混合執行 $ npm-run-all clean lint --parallel watch:html watch:js # 等同於 $ npm-run-all clean lint $ npm-run-all --parallel watch:html watch:js # 通配符 $ npm-run-all --parallel watch:* 

(1)start腳本命令

start腳本命令,用於啓動應用程序。

"start": "npm-run-all --parallel dev serve" 

上面命令並行執行dev腳本命令和serve腳本命令,等同於下面的形式。

$ npm run dev & npm run serve

若是start腳本沒有配置,npm start命令默認執行下面的腳本,前提是模塊的根目錄存在一個server.js文件。

$ node server.js

(2)dev腳本命令

dev腳本命令,規定開發階段所要作的處理,好比構建網頁資源。

"dev": "npm-run-all dev:*" 

上面命令用於繼發執行全部dev的子命令。

"predev:sass": "node-sass --source-map src/css/hoodie.css.map --output-style nested src/sass/base.scss src/css/hoodie.css" 

上面命令將sass文件編譯爲css文件,並生成source map文件。

"dev:sass": "node-sass --source-map src/css/hoodie.css.map --watch --output-style nested src/sass/base.scss src/css/hoodie.css" 

上面命令會監視sass文件的變更,只要有變更,就自動將其編譯爲css文件。

"dev:autoprefix": "postcss --use autoprefixer --autoprefixer.browsers \"> 5%\" --output src/css/hoodie.css src/css/hoodie.css" 

上面命令爲css文件加上瀏覽器前綴,限制條件是隻考慮市場份額大於5%的瀏覽器。

(3)serve腳本命令

serve腳本命令用於啓動服務。

"serve": "live-server dist/ --port=9090" 

上面命令啓動服務,用的是live-server模塊,將服務啓動在9090端口,展現dist子目錄。

live-server模塊有三個功能。

  • 啓動一個HTTP服務器,展現指定目錄的index.html文件,經過該文件加載各類網絡資源,這是file://協議作不到的。
  • 添加自動刷新功能。只要指定目錄之中,文件有任何變化,它就會刷新頁面。
  • npm run serve命令執行之後,自動打開瀏覽器。、

之前,上面三個功能須要三個模塊來完成:http-serverlive-reloadopener,如今只要live-server一個模塊就夠了。

(4)test腳本命令

test腳本命令用於執行測試。

"test": "npm-run-all test:*", "test:lint": "sass-lint --verbose --config .sass-lint.yml src/sass/*" 

上面命令規定,執行測試時,運行lint腳本,檢查腳本之中的語法錯誤。

(5)prod腳本命令

prod腳本命令,規定進入生產環境時須要作的處理。

"prod": "npm-run-all prod:*", "prod:sass": "node-sass --output-style compressed src/sass/base.scss src/css/prod/hoodie.min.css", "prod:autoprefix": "postcss --use autoprefixer --autoprefixer.browsers "> 5%" --output src/css/prod/hoodie.min.css src/css/prod/hoodie.min.css" 

上面命令將sass文件轉爲css文件,並加上瀏覽器前綴。

(6)help腳本命令

help腳本命令用於展現幫助信息。

"help": "markdown-chalk --input DEVELOPMENT.md" 

上面命令之中,markdown-chalk模塊用於將指定的markdown文件,轉爲彩色文本顯示在終端之中。

(7)docs腳本命令

docs腳本命令用於生成文檔。

"docs": "kss-node --source src/sass --homepage ../../styleguide.md" 

上面命令使用kss-node模塊,提供源碼的註釋生成markdown格式的文檔。

pre- 和 post- 腳本

npm run爲每條命令提供了pre-post-兩個鉤子(hook)。以npm run lint爲例,執行這條命令以前,npm會先查看有沒有定義prelint和postlint兩個鉤子,若是有的話,就會先執行npm run prelint,而後執行npm run lint,最後執行npm run postlint

{ "name": "myproject", "devDependencies": { "eslint": "latest" "karma": "latest" }, "scripts": { "lint": "eslint --cache --ext .js --ext .jsx src", "test": "karma start --log-leve=error karma.config.js --single-run=true", "pretest": "npm run lint", "posttest": "echo 'Finished running tests'" } } 

上面代碼是一個package.json文件的例子。若是執行npm test,會按下面的順序執行相應的命令。

  1. pretest
  2. test
  3. posttest

若是執行過程出錯,就不會執行排在後面的腳本,即若是prelint腳本執行出錯,就不會接着執行lint和postlint腳本。

下面是一個例子。

{ "test": "karma start", "test:lint": "eslint . --ext .js --ext .jsx", "pretest": "npm run test:lint" } 

上面代碼中,在運行npm run test以前,會自動檢查代碼,即運行npm run test:lint命令。

下面是一些常見的pre-post-腳本。

  • prepublish:發佈一個模塊前執行。
  • postpublish:發佈一個模塊後執行。
  • preinstall:用戶執行npm install命令時,先執行該腳本。
  • postinstall:用戶執行npm install命令時,安裝結束後執行該腳本,一般用於將下載的源碼編譯成用戶須要的格式,好比有些模塊須要在用戶機器上跟本地的C++模塊一塊兒編譯。
  • preuninstall:卸載一個模塊前執行。
  • postuninstall:卸載一個模塊後執行。
  • preversion:更改模塊版本前執行。
  • postversion:更改模塊版本後執行。
  • pretest:運行npm test命令前執行。
  • posttest:運行npm test命令後執行。
  • prestop:運行npm stop命令前執行。
  • poststop:運行npm stop命令後執行。
  • prestart:運行npm start命令前執行。
  • poststart:運行npm start命令後執行。
  • prerestart:運行npm restart命令前執行。
  • postrestart:運行npm restart命令後執行。

對於最後一個npm restart命令,若是沒有設置restart腳本,prerestartpostrestart會依次執行stop和start腳本。

另外,不能在pre腳本以前再加pre,即prepretest腳本不起做用。

注意,即便Npm能夠自動運行prepost腳本,也能夠手動執行它們。

$ npm run prepublish

下面是post install的例子。

{ "postinstall": "node lib/post_install.js" } 

上面的這個命令,主要用於處理從Git倉庫拉下來的源碼。好比,有些源碼是用TypeScript寫的,可能須要轉換一下。

下面是publish鉤子的一個例子。

{ "dist:modules": "babel ./src --out-dir ./dist-modules", "gh-pages": "webpack", "gh-pages:deploy": "gh-pages -d gh-pages", "prepublish": "npm run dist:modules", "postpublish": "npm run gh-pages && npm run gh-pages:deploy" } 

上面命令在運行npm run publish時,會先執行Babel編譯,而後調用Webpack構建,最後發到Github Pages上面。

以上都是npm相關操做的鉤子,若是安裝某些模塊,還能支持Git相關的鉤子。下面以husky模塊爲例。

$ npm install husky --save-dev

安裝之後,就能在package.json添加precommitprepush等鉤子。

{ "scripts": { "lint": "eslint yourJsFiles.js", "precommit": "npm run test && npm run lint", "prepush": "npm run test && npm run lint", "...": "..." } } 

相似做用的模塊還有pre-commitprecommit-hook等。

內部變量

scripts字段可使用一些內部變量,主要是package.json的各類字段。

好比,package.json的內容是{"name":"foo", "version":"1.2.5"},那麼變量npm_package_name的值是foo,變量npm_package_version的值是1.2.5。

{ "scripts":{ "bundle": "mkdir -p build/$npm_package_version/" } } 

運行npm run bundle之後,將會生成build/1.2.5/子目錄。

config字段也能夠用於設置內部字段。

"name": "fooproject", "config": { "reporter": "xunit" }, "scripts": { "test": "mocha test/ --reporter $npm_package_config_reporter" } 

上面代碼中,變量npm_package_config_reporter對應的就是reporter。

通配符

npm的通配符的規則以下。

  • * 匹配0個或多個字符
  • ? 匹配1個字符
  • [...] 匹配某個範圍的字符。若是該範圍的第一個字符是!^,則匹配不在該範圍的字符。
  • !(pattern|pattern|pattern) 匹配任何不符合給定的模式
  • ?(pattern|pattern|pattern) 匹配0個或1個給定的模式
  • +(pattern|pattern|pattern) 匹配1個或多個給定的模式
  • *(a|b|c) 匹配0個或多個給定的模式
  • @(pattern|pat*|pat?erN) 只匹配給定模式之一
  • ** 若是出如今路徑部分,表示0個或多個子目錄。

開發NPM模塊的時候,有時咱們會但願,邊開發邊試用,好比本地調試的時候,require('myModule')會自動加載本機開發中的模塊。Node規定,使用一個模塊時,須要將其安裝到全局的或項目的node_modules目錄之中。對於開發中的模塊,解決方法就是在全局的node_modules目錄之中,生成一個符號連接,指向模塊的本地目錄。

npm link就能起到這個做用,會自動創建這個符號連接。

請設想這樣一個場景,你開發了一個模塊myModule,目錄爲src/myModule,你本身的項目myProject要用到這個模塊,項目目錄爲src/myProject。首先,在模塊目錄(src/myModule)下運行npm link命令。

src/myModule$ npm link

上面的命令會在NPM的全局模塊目錄內,生成一個符號連接文件,該文件的名字就是package.json文件中指定的模塊名。

/path/to/global/node_modules/myModule -> src/myModule

這個時候,已經能夠全局調用myModule模塊了。可是,若是咱們要讓這個模塊安裝在項目內,還要進行下面的步驟。

切換到項目目錄,再次運行npm link命令,並指定模塊名。

src/myProject$ npm link myModule

上面命令等同於生成了本地模塊的符號連接。

src/myProject/node_modules/myModule -> /path/to/global/node_modules/myModule

而後,就能夠在你的項目中,加載該模塊了。

var myModule = require('myModule'); 

這樣一來,myModule的任何變化,均可以直接反映在myProject項目之中。可是,這樣也出現了風險,任何在myProject目錄中對myModule的修改,都會反映到模塊的源碼中。

若是你的項目再也不須要該模塊,能夠在項目目錄內使用npm unlink命令,刪除符號連接。

src/myProject$ npm unlink myModule

npm bin

npm bin命令顯示相對於當前目錄的,Node模塊的可執行腳本所在的目錄(即.bin目錄)。

# 項目根目錄下執行 $ npm bin ./node_modules/.bin 

npm adduser

npm adduser用於在npmjs.com註冊一個用戶。

$ npm adduser
Username: YOUR_USER_NAME
Password: YOUR_PASSWORD
Email: YOUR_EMAIL@domain.com

npm publish

npm publish用於將當前模塊發佈到npmjs.com。執行以前,須要向npmjs.com申請用戶名。

$ npm adduser

若是已經註冊過,就使用下面的命令登陸。

$ npm login

登陸之後,就可使用npm publish命令發佈。

$ npm publish

若是當前模塊是一個beta版,好比1.3.1-beta.3,那麼發佈的時候須要使用tag參數,將其發佈到指定標籤,默認的發佈標籤是latest

$ npm publish --tag beta

若是發佈私有模塊,模塊初始化的時候,須要加上scope參數。只有npm的付費用戶才能發佈私有模塊。

$ npm init --scope=<yourscope> 

若是你的模塊是用ES6寫的,那麼發佈的時候,最好轉成ES5。首先,須要安裝Babel。

$ npm install --save-dev babel-cli@6 babel-preset-es2015@6 

而後,在package.json裏面寫入build腳本。

"scripts": { "build": "babel source --presets babel-preset-es2015 --out-dir distribution", "prepublish": "npm run build" } 

運行上面的腳本,會將source目錄裏面的ES6源碼文件,轉爲distribution目錄裏面的ES5源碼文件。而後,在項目根目錄下面建立兩個文件.npmignore.gitignore,分別寫入如下內容。

// .npmignore
source

// .gitignore
node_modules
distribution

npm deprecate

若是想廢棄某個版本的模塊,可使用npm deprecate命令。

$ npm deprecate my-thing@"< 0.2.3" "critical bug fixed in v0.2.3" 

運行上面的命令之後,小於0.2.3版本的模塊的package.json都會寫入一行警告,用戶安裝這些版本時,這行警告就會在命令行顯示。

npm owner

模塊的維護者能夠發佈新版本。npm owner命令用於管理模塊的維護者。

# 列出指定模塊的維護者 $ npm owner ls <package name> # 新增維護者 $ npm owner add <user> <package name> # 刪除維護者 $ npm owner rm <user> <package name> 

其餘命令

npm home,npm repo

npm home命令能夠打開一個模塊的主頁,npm repo命令則是打開一個模塊的代碼倉庫。

$ npm home $package $ npm repo $package 

這兩個命令不須要模塊先安裝。

npm outdated

npm outdated命令檢查當前項目所依賴的模塊,是否已經有新版本。

$ npm outdated

它會輸出當前版本(current version)、應當安裝的版本(wanted version)和最新發布的版本(latest version)。

npm prune

npm prune檢查當前項目的node_modules目錄中,是否有package.json裏面沒有提到的模塊,而後將全部這些模塊輸出在命令行。

$ npm prune

npm shrinkwrap

npm shrinkwrap的做用是鎖定當前項目的以來模塊的版本。

$ npm shrinkwrap

運行該命令後,會在當前項目的根目錄下生成一個npm-shrinkwrap.json文件,內容是node_modules目錄下全部已經安裝模塊的版本。

下次運行npm install命令時,npm發現當前目錄下有npm-shrinkwrap.json文件,就會只安裝裏面提到的模塊,且版本也會保持一致。

相關文章
相關標籤/搜索