[轉] 【譯】讓人傾倒的 11 個 npm trick

【From】 https://segmentfault.com/a/1190000006804410javascript

 

本文轉載自:衆成翻譯
譯者:文藺
連接:http://www.zcfy.cc/article/1206
原文:https://nodesource.com/blog/eleven-npm-tricks-that-will-knock-your-wombat-socks-off/java

有效率地使用 npm 可能會很困難。內置特性堆積如山,嘗試學習它們是很艱鉅的任務。node

就我我的而言,單學習並使用其中一些小 trick 解救了我,從前移除那些未使用的模塊時,我只能先刪除整個 node_modules 文件夾,接着再用 npm install 從新安裝一切。(npm prune,請見本文第四節。)如你所想,這簡直要讓人發狂了。git

咱們編了這樣一個 trick 列表,使用起來很簡單,它們會加速你使用 npm 開發的過程,不管你在作什麼項目。github

1.打開 package 主頁

運行: npm home $packageexpress

執行 home 命令會打開 $package 的主頁。例如,若是指定 $package 爲 lodash,那麼就就會打開 Lodash 官網。沒有安裝(全局/某個項目) package 不影響該命令的使用。npm

2. 打開 package Github 倉庫

運行: npm repo $packagejson

相似前面的 home 命令, repo 命令會打開 $package 的 Github 倉庫。如 npm repo express 會打開 Express 的官方倉庫地址。一樣,不須要安裝 package 就能使用。segmentfault

3. 檢查 package 的過期依賴

運行: npm outdatedapi

在項目中,運行 outdated 命令會經過 npm registry 檢查是否有過期的 package,並在命令行中打印出當前版本、所需版本以及最新版本。

4. 檢查 package.json 中未聲明的 package

運行: npm prune

運行 prune 命令,npm CLI 會讀取 package.json,並將結果與項目的 /node_modules 目錄進行對比,並打印出不在package.json 之列的模塊列表。

npm prune 命令接着會拿出這些 package,並移除那些沒有手動加到 package.json 中或沒有使用 --save 標誌安裝的 package。

更新: 感謝 @EvanHahn 提醒,一種我的配置可讓 npm prune 提供與 npm 默認方式略有不一樣的結果。

5. 鎖定依賴版本

運行: npm shrinkwrap

在項目中使用 shrinkwrap 命令,會生成一個 npm-shrinkwrap.json 文件,將項目依賴鎖定在當前在 node_modules 中使用的特定版本。運行 npm install 時,若發現存在 npm-shrinkwrap.json,則會覆蓋列出的依賴以及 package.json 中的任何語義版本範圍。

若是須要驗證項目中 package.json、 npm-shrinkwrap.json 及 node_modules 的一致性,能夠考慮使用 npm-shrinkwrap

6. 在 Node.js v4 LTS 中使用 npm v3

運行: npm install -g npm@3

使用 npm 全局安裝 npm@3,會將 npm v2 升級至 v3。使用 npm v2 LTS 的 Node.js v4 LTS 發佈版本(「Argon」)中也是如此。這會在 v4 LTS 中安裝 npm v3 的最新穩定版本。(譯者注:LTS 指 Long-Term Support, 即提供長期技術支持的版本。)

7. 運行 npm install -g,無需加 sudo

運行: npm config set prefix $dir

$dir 指你想將全局依賴安裝在的目錄,運行命令,這一來,安裝全局模塊不再用使用 sudo,該目錄則成爲全局的 bin 目錄。惟一須要注意的是,確保使用 chown -R $USER $dir 該目錄的調整用戶權限

8. 改變全部項目的默認前綴

運行: npm config set save-prefix ~

使用 --save 或 --save-dev 標誌安裝新 package 時,使用 ~ 比默認的 ^ 行爲更加保守。~ 將依賴鎖定在小版本(minor version),容許使用 npm update 安裝補丁版本。^ 將依賴鎖定在主版本,容許使用 npm update更新小版本。

9. 生產環境下去除 devDependencies 依賴

項目準備上到生產環境時,確保使用 --production 標誌安裝依賴。該標誌會安裝 dependencies,忽略 devDependencies。這會確保開發所使用的工具及 package 不會進入生產環境。

此外,還能夠將 NODE_ENV 環境變量設置爲 production,確保 devDependencies 毫不會被安裝。

10. 使用 .npmignore 要小心

若是還沒使用過 .npmignore,會默認使用 .gitignore 文件,加上一些更健全的默認選項。

不少人不明白都是,一旦在項目中添加了 .npmignore 文件,.gitignore 的規則就會被忽略(好諷刺,出乎意料啊)。結果就是,發佈項目時,不得不審查兩個文件是否同步,防止敏感信息的泄露。

11. 帶默認內容的 npm init

在新項目中運行 npm init 時,能夠配置 package.json 細節。若是想設置 npm init 會一直使用的默認工做,可使用 config set 命令,加上一些額外的參數:

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

若想完全自定義初始化腳本,能夠指定一個自定義的默認腳本:

`npm config set init-module ~/.npm-init.js``

下面是一個示例腳本,會彈出私有設置項,在須要狀況下建立 Github 倉庫。確保更改默認的 Github 用戶名(YOUR_GITHUB_USERNAME),做爲 Github 用戶名環境變量的 fallback 值。

var cp = require('child_process'); var priv; var USER = process.env.GITHUB_USERNAME || 'YOUR_GITHUB_USERNAME'; module.exports = { name: prompt('name', basename || package.name), version: '0.0.1', private: prompt('private', 'true', function(val){ return priv = (typeof val === 'boolean') ? val : !!val.match('true') }), create: prompt('create github repo', 'yes', function(val){ val = val.indexOf('y') !== -1 ? true : false; if(val){ console.log('enter github password:'); cp.execSync("curl -u '"+USER+"' https://api.github.com/user/repos -d " + "'{\"name\": \""+basename+"\", \"private\": "+ ((priv) ? 'true' : 'false') +"}' "); cp.execSync('git remote add origin '+ 'https://github.com/'+USER+'/' + basename + '.git'); } return undefined; }), main: prompt('entry point', 'index.js'), repository: { type: 'git', url: 'git://github.com/'+USER+'/' + basename + '.git' }, bugs: { url: 'https://github.com/'+USER'/' + basename + '/issues' }, homepage: "https://github.com/"+USER+"/" + basename, keywords: prompt(function (s) { return s.split(/\s+/) }), license: 'MIT', cleanup: function(cb){ cb(null, undefined) } }

最後一點...

若想學習更多關於 npm、Node.js、JavaScript、Docker、Kubernetes 以及 Electron 等等等等,能夠在 Twitter、 上關注 @NodeSource。咱們一直都在,很樂意收到你的消息!

譯者注

更多內容,歡迎關注我的博客 http://www.wemlion.com/

相關文章
相關標籤/搜索