NPM筆記

NPM筆記:

名字的含義:

1、是Node的開放式模塊登記和管理系統(tǒng)

2、Node默認的模塊管理器,是一個命令行下的軟件,用來安裝和管理Node模塊

常用命令:

更新到最新版本(全局):npm install npm@latest -g

查看npm命令列表:npm help

查看各個命令的簡單用法:npm -l

查看npm版本:npm -v

查看npm配置:npm config list -l

生成新的package.json:npm init? (添加-y 或者 -f 表示直接跳過提問階段,直接生成package.json文件)

設置環(huán)境變量:npm set <key> <value>

例如:設置package.json初始化的作者、郵箱、主頁和許可證字段

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 set save-exact true (package.json記錄一個具體的版本,而非一個版本范圍)

npm config命令

設置全局的模塊安裝目錄:npm config set prefix $dir($dir文件路徑)

允許的版本范圍從^變?yōu)?~ :npm config set save-prefix ~

^ :匹配最近小版本依賴包

~:匹配最新的大版本依賴包 (推薦使用~ 小版本可能會不穩(wěn)定,引起一些不可預知的異常)

*:匹配最新的版本依賴包

配置用戶名:npm config set init.author.name $name

配置郵箱: npm config set init.author.email $email

查看模塊具體信息:npm info <package_name>

搜索npm倉庫:npm search <package_name| Reg> (可以是字符串也可以是正則)

以樹型結構列出當前項目安裝的所有模塊,以及它們依賴的模塊:npm list

以樹型結構列出全局安裝的所有模塊,以及它們依賴的模塊:npm list -global

npm install命令

本地安裝:npm install <package_name>

全局安裝:npm install -global <package_name> |?npm install -g?<package_name>

github安裝:npm?install git://github.com/package/path.git

安裝之前,npm install 會先檢查,node_modules目錄是否存在指定模塊,如果存在就不會重新安裝,即使指定模塊存在新版本。

如果想重新安裝,可使用命令:npm install <package_name> --force

當然,你要是打算整個模塊都需要重新安裝,可以手動刪除node_modules目錄,也可以通過命令行刪除:rm -rf node_modules

然后運行 npm install 重新導入

安裝不同版本:

最新版本:npm install <package_name>@latest?

固定版本:npm install <package_name>@0.1.1

版本區(qū)間:npm install <package_name>@'>=0.1.1 < 0.2.0'

安裝最新的beta版:npm install <package_name>@beta(latest beta)

安裝最新的beta版:npm install?<package_name>@beta(latest beta)

安裝指定的beta版:npm install?<package_name>@1.3.1-beta.3

install命令可以使用不同參數(shù),指定所安裝的模塊屬于哪一種性質(zhì)的依賴關系,即出現(xiàn)在packages.json文件的哪一項中。

–save:模塊名將被添加到dependencies,可以簡化為參數(shù)-S。

–save-dev: 模塊名將被添加到devDependencies,可以簡化為參數(shù)-D。

兩者區(qū)別:簡單理解來說就是 -S 對應的是生產(chǎn)環(huán)境 -D對應的是本地開發(fā)環(huán)境,具體來說,當你指定的模塊需要在生成環(huán)境使用的話,最好使用-S安裝。當你打包的時候,會把改資源打包成文件,供用戶訪問,瀏覽器緩存。devDependencies一般保存的是工具類模塊,在生產(chǎn)環(huán)境不會用到。但是vue例外。如果vue內(nèi)引用了devDependencies內(nèi)資源,也會打包到生產(chǎn)包內(nèi),并發(fā)布

npm install sax --save

npm install node-tap --save-dev

npm install sax -S

npm install node-tap -D

npm install默認會安裝dependencies字段和devDependencies字段中的所有模塊,如果使用--production參數(shù),可以只安裝dependencies字段的模塊。

npm install --production

NODE_ENV=production npm install

避免系統(tǒng)權限

1)、在主目錄下新建配置文件.npmrc,然后在該文件中將prefix變量定義到主目錄下面:prefix=/home/yourUsername/npm

2)、在主目錄下新建npm子目錄 :mkdir ~/npm

3)、將這個路徑在.bash_profile文件(或.bashrc文件)中加入PATH變量:export PATH=~/npm/bin:$PATH

更新模塊

升級當前項目的指定模塊

npm update [package_name]

升級全局安裝的模塊

npm update -global [package_name]

npm update會先到遠程倉庫查詢最新版本,然后查詢本地版本。如果本地版本不存在,或者遠程版本較新,就會安裝。使用-S或--save參數(shù),可以在安裝的時候更新package.json里面模塊的版本號

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

npm --depth 9999 update?[package_name]

卸載已安裝的模塊:npm uninstall

卸載本地模塊:npm uninstall [package_name]

卸載全局模塊:npm uninstall [package_name] -global

執(zhí)行腳本:npm run

package.json文件有一個scripts字段,可以用于指定腳本命令,供npm直接調(diào)用。

npm run命令會自動在環(huán)境變量$PATH添加node_modules/.bin目錄,所以scripts字段里面調(diào)用命令時不用加上路徑,這就避免了全局安裝NPM模塊。

npm run如果不加任何參數(shù),直接運行,會列出package.json里面所有可以執(zhí)行的腳本命令。

npm run會創(chuàng)建一個Shell,執(zhí)行指定的命令,并臨時將node_modules/.bin加入PATH變量,這意味著本地模塊可以直接運行。

如果希望一個操作的輸出,是另一個操作的輸入,可以借用Linux系統(tǒng)的管道命令,將兩個操作連在一起。

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

或者

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

npm run本身有一個參數(shù)-s,表示關閉npm本身的輸出,只輸出腳本產(chǎn)生的結果。

scripts字段的腳本命令,有一些最佳實踐,可以方便開發(fā)。首先,安裝npm-run-all模塊。

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

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

# 繼發(fā)執(zhí)行

npm-run-all build:html build:js

# 等同于

npm run build:html&&npm run build:js

# 并行執(zhí)行

npm-run-all--parallel watch:html watch:js

# 等同于

npm run watch:html & npm run watch:js

# 混合執(zhí)行

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:*

pre- 和 post- 腳本

npm run為每條命令提供了pre-和post-兩個鉤子(hook)。以npm run lint為例,執(zhí)行這條命令之前,npm會先查看有沒有定義prelint和postlint兩個鉤子,如果有的話,就會先執(zhí)行npm run prelint,然后執(zhí)行npm run lint,最后執(zhí)行npm run postlint。

內(nèi)部變量

scripts字段可以使用一些內(nèi)部變量,主要是package.json的各種字段,例如:package.json的內(nèi)容是{"name":"yeyezaici", "version":"8.8.8"},此時變量npm_package_name就是yeyezaici。再scripts內(nèi)使用:

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

npm的通配符的規(guī)則如下:

*?匹配0個或多個字符

??匹配1個字符

[...]?匹配某個范圍的字符。如果該范圍的第一個字符是!或^,則匹配不在該范圍的字符。

!(pattern|pattern|pattern)?匹配任何不符合給定的模式

?(pattern|pattern|pattern)?匹配0個或1個給定的模式

+(pattern|pattern|pattern)?匹配1個或多個給定的模式

*(a|b|c)?匹配0個或多個給定的模式

@(pattern|pat*|pat?erN)?只匹配給定模式之一

**?如果出現(xiàn)在路徑部分,表示0個或多個子目錄


自動建立符號鏈接:npm link

場景預設:你開發(fā)了一個模塊A,目錄為src/A,你自己的項目B要用到這個模塊,項目目錄為src/B。

1)、在模塊目錄(src/B)下運行npm link命令,這時會在NPM的全局模塊目錄內(nèi),生成一個符號鏈接文件,該文件的名字就是package.json文件中指定的模塊名。

2)、如果我們要讓這個模塊安裝在項目內(nèi),還要進行下面的步驟:切換到項目目錄,再次運行npm link命令,并指定模塊名:npm link A

刪除符號鏈接:npm unlink A

命令顯示相對于當前目錄:npm bin

在npmjs.com注冊一個用戶:npm adduser

npm adduser

Username: YOUR_USER_NAME

Password: YOUR_PASSWORD

Email: YOUR_EMAIL@domain.com

將當前模塊發(fā)布到npmjs.com:

1)、先向npmjs.com注冊用戶:npm adduser

2)、如果已經(jīng)注冊過,直接登錄:npm login

3)、發(fā)布模塊:npm publish

4)、發(fā)布bate版本需要打標簽,默認版本為latest:npm publish --tag?beta

5)、發(fā)布私有模塊,在初始化的時候需要加入 --scope ,當然只有付費的用戶才能創(chuàng)建私有模塊:npm init --scope=<yourscope>

6)、ES6轉ES5(安裝babel):npm install --save-dev babel-cli@6 babel-preset-es2015@6

7)、然后,在package.json里面寫入build腳本。

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

運行上面的腳本,會將source目錄里面的ES6源碼文件,轉為distribution目錄里面的ES5源碼文件。然后,在項目根目錄下面創(chuàng)建兩個文件.npmignore和.gitignore,分別寫入以下內(nèi)容。

// .npmignore

source

// .gitignore

node_modules

distribution

廢棄某個版本的模塊:npm deprecate

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

管理模塊的維護者:npm owner

列出指定模塊的維護者:npm owner ls <package_name>

新增維護者:npm owner add <user> <package_name>

刪除維護者:npm owner rm <user> <package_name>??

其他命令:

打開一個模塊的主頁:npm home?$package

打開一個模塊的倉儲:npm repo $package

檢查當前項目所依賴的模塊,是否已經(jīng)有新版本:npm outdated

檢查當前項目的node_modules目錄中,是否有package.json里面沒有提到的模塊,然后將所有這些模塊輸出在命令行:npm prune

鎖定當前項目的依賴模塊的版本:npm shrinkwrap

運行該命令后,會在當前項目的根目錄下生成一個npm-shrinkwrap.json文件,內(nèi)容是node_modules目錄下所有已經(jīng)安裝的模塊,以及它們的精確版本。

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

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容