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


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

1.以下為報錯具體詳情;node 8.1.2 版本問題:其他空間安裝成功但是安裝webpack 總是報以下錯誤:解決辦法為重新安裝node

 

 

2.

npm模塊管理器

來自《JavaScript 標准參考教程(alpha)》,by 阮一峰

目錄

簡介

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

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

$ npm install npm@latest -g

上面的命令中,@latest表示最新版本,-g表示全局安裝。所以,命令的主干是npm install npm,也就是使用npm安裝自己。之所以可以這樣,是因為npm本身與Node的其他模塊沒有區別。

然后,運行下面的命令,查看各種信息。

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

npm init

npm init用來初始化生成一個新的package.json文件。它會向用戶提問一系列問題,如果你覺得不用修改默認配置,一路回車就可以了。

如果使用了-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文件,就會只安裝里面提到的模塊,且版本也會保持一致。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM