亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

13 個npm 快速開發技巧(推薦)

2019-11-19 11:14:17
字體:
來源:轉載
供稿:網友

為了保證的可讀性,本文采用意譯而非直譯。

每天,數以百萬計的開發人員使用 npm 或 yarn 來構建項目。運行npm init或npx create- response -app等命令幾乎構建JS項目的首選方式,無論是為客戶端或服務器端,還是桌面應用程序。

但是npm不僅僅是初始化項目或安裝包。在本文中,我們將會介紹 npm 的13個技巧來最大限度地利用npm:從簡單的快捷方式到自定義腳本。

由于我們中的許多人每天都使用npm,從長遠來看,即使節省少量的時間也會產生顯著的影響。這些技巧是針對初學者和中級開發人員的,但是即使您是一位經驗豐富的開發人員,我希望你仍然能夠找到一到兩個你以前沒有遇到過的特性。

想閱讀更多優質文章請猛戳GitHub博客,一年百來篇優質文章等著你!

主要內容

  1. 學習基本快捷方式
  2. 設置默認npm init屬性
  3. 讓腳本跨平臺兼容
  4. 并行運行腳本
  5. 在不同的目錄中運行腳本
  6. 延遲運行腳本直到端口準備就緒
  7. 列出并選擇可用腳本
  8. 運行前后腳本
  9. 控制應用程序版本
  10. 從命令行編輯package.json
  11. 自動設置和打開你的github庫
  12. 自定義npm init腳本
  13. 使用自定義npm init腳本將你的第一個 Commit 提交到 GitHub

1.學習基本快捷方式

我們從最基本的開始,學習最常見的npm快捷方式從長遠來將會節省很多時間。

  • 安裝  ―  常規:npm install,簡寫:npm i。
  • 測試  ―  常規:npm test,簡寫:npm t。
  • 幫助  ―  常規:npm --help,簡寫:npm -h。
  • 全局標志 ―  常規: --global,簡寫:-g。
  • 保存為開發依賴 - 常規: - save-dev,簡寫:-D。
  • npm init 默認值 - 常規:npm init --yes 或 npm init --force,簡寫:npm init -y 或 npm init -f

我們知道使用-save或-S來保存包,但現在這是個已經是默認值。要安裝一個包而不保存它,可以使用 ――no-save標志。

不太常見的快捷鍵

還有一些不常見的快捷方式,如下:

安裝包信息將加入到optionalDependencies(可選階段的依賴)- 常規:--save-optional, 簡寫:-O。
精確安裝指定模塊版本 - 常規:--save-optional, 簡寫:-O。
如果需要在本地保存一個npm包,或者通過單個文件下載選擇一組可用的包,可以使用--save-bundle或-B將它們捆綁在一起,并使用npm pack獲得捆綁包。

根的快捷方式

. 符號通常用于表示應用程序的根目錄,npm術語中的應用程序入口點,即package.json中指定為“main”的值

{ "main": "index.js"}

這個快捷方式也可以用于像npx create-react-app . 這樣的命令。因此,可以運行npx create-react-app .,而不是使用 npx create-react-app my-app 創建一個新的my-app目錄。

2. 設置默認npm init屬性

當運行npm init開始一個新項目時,你可能會發現自己一次又一次地輸入配置細節。假如,你可能是項目的主要負責人。有時為了節省時間,可以為這些字段設置默認值,如下所示:

npm config set init.author.name "Joe Bloggs"npm config set init.author.email "JoebLoggs@gmail.com"npm config set init.author.url "Joebloggs.com"npm config set init.license "MIT"

要檢查是否正確添加了這些屬性,在終端輸入 npm config edit查看配置文件信息。當然也j可以通過直接在打開的配置文件編輯信息。 如果要編輯全局npm設置,使用npm config edit -g。

要重新初始化默認設置,可以使用以下腳本。第一行用空字符串替換配置文件,第二行用默認設置重新填充配置文件。

echo "" > $(npm config get userconfig)npm config edit

上面的腳本將重置用戶默認值,下面的腳本將重置全局默認值

echo "" > $(npm config get globalconfig)npm config --global edit

3. 讓腳本跨平臺兼容

任何在命令行上運行的代碼都有兼容性問題的風險,特別是在Windows和基于unix的系統(包括Mac和Linux)之間。如果你只處理特定的項目,那么這不是問題,但是在許多情況下,跨平臺兼容性很有必要的:任何開放源碼或協作項目,以及示例和教程項目,都應該能夠工作,而不管操作系統是什么。

謝天謝地,解決方案很簡單。有幾個選項可供選擇,但效果最好的是cross-env。使用npm i -D cross-env將其作為開發依賴項安裝。然后在任何環境變量之前包括關鍵字cross-env,就像這樣:

{ "scripts": {  "build": "cross-env NODE_ENV=production webpack --config build/wepack.config.js" }}

cross-env是 實現跨平臺兼容性的最無縫的方法,但還有其他兩個流行的工具,它們可以幫助實現跨平臺兼容性:

rimraf 可以安裝在全球運行跨平臺腳本
ShellJS 是Unix shell命令在Node.js API上的可移植實現。

4. 并行運行腳本

可以使用&&來依次運行兩個或多個進程。但是并行運行腳本呢?為此,我們可以從各種npm包中進行選擇。concurrent npm-run-all 是最流行的解決方案。

首先通過 npm i -D concurrently 安裝開發依賴。然后按照以下格式將其添加到腳本中:

{ "start": "concurrently /"command1 arg/" /"command2 arg/""}

5. 在不同的目錄中運行腳本

有時,在不同的文件夾中擁有一個包含多個package.json文件的應用程序。 從根目錄訪問這些腳本會很方便,而不是每次要運行腳本時導航到不同的文件夾,有兩種方法可以執行此操作。

第一種是手動 cd 并運行對應的命令:

cd folder && npm start && cd ..

但還有一個更優雅的解決方案,即使用--prefix標志指定路徑:

npm start --prefix path/to/your/folder

下面是一個工作應用程序中此解決方案的示例,我們希望在前端(在客戶機目錄中)和后端(在服務器目錄中)運行 npm start。

"start": "concurrently /"(npm start --prefix client)/" /"(npm start --prefix server)/"",

6. 延遲運行腳本直到端口準備就緒

通常,在開發全堆棧應用程序期間,咱們可能希望同時啟動服務器和客戶端。wait-on 節點模塊提供了一種方便的方法來確保進程只在某些進程就緒時發生:在我們的例子中,我們有一個特定的端口。

例如,這是我在使用React前端的Electron項目中使用的dev腳本。 同時使用,腳本并行加載表示層和Electron窗口。 但是,使用wait-on,只有在 http://localhost:3000 啟動好,才會打開Electron窗口。

"dev": "concurrently /"cross-env BROWSER=none npm run start/" /"wait-on http://localhost:3000 && electron ./"",

此外,React默認情況下會打開一個瀏覽器窗口,但對于 Electron 開發來說,這是不必要的。咱們可以通過傳遞環境變量BROWSER=none來禁用此行為。

7. 列出并選擇可用腳本

列出package.json文件中可用的腳本很簡單:只需轉到項目的根目錄并在終端中輸入npm run。

但是有一種更方便的方法可以獲得腳本列表,可以立即運行該列表:為此,全局安裝 NTL (npm任務列表)模塊:

npm i -g ntl

然后在項目文件夾中運行ntl命令,可以獲得一個可用腳本列表,并可以選擇其中一個運行。

8. 運行前后腳本

你可能熟悉prebuild和postbuild這樣的腳本,它們允許你定義在構建腳本之前或之后運行的代碼。但事實上,pre和post可以在任何腳本之前添加,包括自定義腳本。

這不僅使你的代碼更干凈,而且還允許你單獨運行pre和post腳本。

9. 控制應用程序版本

與手動更改應用程序的版本相比,npm 提供了一些有用的快捷方式來完成這一點。 要增加版本,請在運行 npm version加上major,minor或patch`:

// 1.0.0npm version patch// 1.0.1npm version minor// 1.1.0npm version major// 2.0.0

根據更新應用程序的頻率,可以通過在每次部署時增加版本號來節省時間,使用以下腳本:

{ "predeploy": "npm version patch"}

10. 從命令行編輯 package.json

package.json是一個常規的json文件,因此可以使用工具庫json從命令行進行編輯。 這在修改package.json提供另外一種新的方式,允許w你q創建超出默認值的快捷方式。 全局安裝:

npm install -g json

然后,可以使用它來使用-I進行就地編輯。 例如,要添加值為“bar”的新腳本“foo”,這樣寫:

json -I -f package.json -e 'this.scripts.foo="bar"'

11. 自動設置和打開你的github庫

如果package.json文件中有“repository”,則可以通過輸入 npm repo在默認瀏覽器中打開它。

如果你的項目已經連接到遠程存儲庫,并且已經在命令行上安裝了git,那您可以使用這個命令找到你的連接存儲庫

git config --get remote.origin.url

更好的是,如果你按照上面的提示并安裝了json模塊,可以使用下面的腳本自動將正確的存儲庫添加到 package.json

json -I -f package.json -e "this.repository=/"$(git config --get remote.origin.url)/""

12. 自定義npm init腳本

讓我們更進一步,使用我們自己的npm init腳本,它接受GitHub存儲庫URL并自動推送我們的第一個提交。在本技巧中,我們將討論如何創建自定義npm init腳本。在下一個(也是最后一個)技巧中,我們將合并git。

可以通過重定向到主目錄中的.npm-init.js文件來編輯npm init腳本。(在Windows上,通常是 c/Users/<用戶名>,在 Mac 上,它是/Users/<用戶名>)。

讓我們首先在我們的主目錄中創建一個.nmm-init.js文件。為了確保npm init被指向正確的文件,可以運行:

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

在集成git之前,這里有一個簡單的.npm-init.js文件,它模擬了默認npm init的問題

module.exports = { name: prompt('package name', basename || package.name), version: prompt('version', '0.0.0'), decription: prompt('description', ''),  main: prompt('entry point', 'index.js'), repository: prompt('git repository', ''), keywords: prompt(function (s) { return s.split(//s+/) }), author: prompt('author', 'Joe Bloggs <joe.bloggs@gmail.com> (joebloggs.com)'), license: prompt('license', 'ISC')}

每個問題都遵循nameInPackage模式:prompt('nameInPrompt','defaultValue')。要在缺省情況下設置值而不帶問題,只需刪除prompt方法。

如果要返回默認設置,只需刪除.npm-init.js。

13. 使用自定義npm init腳本將你的第一個 Commit 提交到 GitHub

為了將git命令合并到.npm-init.js文件中,需要一種方法來控制命令行。為此,我們可以使用child_process 模塊。在文件的頂部引入它,因為我們只需要execSync函數,所以可以使用析構賦值語法自己獲取它:

const { execSync } = require('child_process');

我還創建了一個helper函數,它將函數的結果打印到控制臺:

function run(func) { console.log(execSync(func).toString())}

最后,我們將提示輸入GitHub存儲庫URL,如果提供,我們將生README.md文件,并啟動我們的第一次提交。

repository: prompt('github repository url', '', function (url) { if (url) {  run('touch README.md');  run('git init');  run('git add README.md');  run('git commit -m "first commit"');  run(`git remote add origin ${url}`);  run('git push -u origin master'); } return url;})

總的來說,.npm-init.js文件大概如下:

const { execSync } = require('child_process');function run(func) { console.log(execSync(func).toString())}module.exports = { name: prompt('package name', basename || package.name), version: prompt('version', '0.0.0'), decription: prompt('description', ''), main: prompt('entry point', 'index.js'), keywords: prompt(function (s) { return s.split(//s+/) }), author: prompt('author', 'Joe Bloggs <joe.bloggs@gmail.com> (joebloggs.com)'), license: prompt('license', 'ISC'), repository: prompt('github repository url', '', function (url) {  if (url) {   run('touch README.md');   run('git init');   run('git add README.md');   run('git commit -m "first commit"');   run(`git remote add origin ${url}`);   run('git push -u origin master');  }  return url; }),}

package.json文件:

{ "name": "Custom npm init", "version": "0.0.0", "decription": "A test project, to demonstrate a custom npm init script.", "main": "index.js", "keywords": [], "author": "Joe Bloggs <joe.bloggs@gmail.com> (joebloggs.com)", "license": "ISC", "repository": {  "type": "git",  "url": "git+https://github.com/JoeBloggs/custom.git" }, "bugs": {  "url": "https://github.com/JoeBloggs/custom/issues" }, "homepage": "https://github.com/JoeBloggs/custom#readme"}

你也可以通過合并GitHub API進一步實現這一點,這樣就不需要創建一個新的存儲庫,這部分留給你們自己完成。

總的來說,希望這篇文章能夠讓你了解npm可以實現的目標,并展示了一些提高工作效率的方法 - 無論是你知道常見的快捷方式,還是通過充分利用腳本 package.json,或編寫自定義版本的npm init。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品日韩欧美综合| 日韩高清av在线| 日韩最新在线视频| xvideos亚洲人网站| 777午夜精品福利在线观看| 国内免费精品永久在线视频| 国产一区二区三区欧美| 久久久久国产精品一区| 久久天天躁狠狠躁夜夜爽蜜月| 亚洲综合中文字幕在线观看| 91麻豆国产语对白在线观看| 久久国产精彩视频| 日韩在线视频一区| 国产日韩欧美中文在线播放| 国产欧美日韩精品丝袜高跟鞋| 国产手机视频精品| 亚洲男女自偷自拍图片另类| 国产精品盗摄久久久| 91精品国产成人| 欧美黄色免费网站| 国产成人精品免费视频| 日韩av综合网| 亚洲精品大尺度| 亚洲色无码播放| 国产精品观看在线亚洲人成网| 亚洲精品一区av在线播放| 亚洲图片在线综合| 中日韩美女免费视频网址在线观看| 成人亲热视频网站| 波霸ol色综合久久| 国产女同一区二区| 国产精品69av| 亚洲高清福利视频| 欧美激情喷水视频| 日韩高清中文字幕| 福利二区91精品bt7086| 91精品久久久久久久久久入口| 国产精品视频xxx| 亚洲人成免费电影| 韩国精品久久久999| 岛国精品视频在线播放| 欧美激情视频在线免费观看 欧美视频免费一| 成人性生交大片免费观看嘿嘿视频| 91精品国产综合久久香蕉最新版| 秋霞午夜一区二区| 亚洲精品美女在线观看| 国产精品久久久久久久久久久久| 久久久久久久电影一区| 91综合免费在线| 亚洲精品国产综合久久| 日韩天堂在线视频| 一个人看的www欧美| 国产精品免费网站| 欧美成人全部免费| 伦理中文字幕亚洲| 亚洲最大福利视频网站| 国产精品网红福利| 日韩电影中文字幕在线| 国产mv久久久| 久久av红桃一区二区小说| 国内揄拍国内精品| 日韩在线免费高清视频| 久久精品一本久久99精品| 亚洲欧美另类中文字幕| 日韩高清免费观看| 欧美日韩国产丝袜美女| 日韩精品丝袜在线| 国产精品www色诱视频| 国产在线观看精品| 成人国产精品一区| 97高清免费视频| 欧美日韩一区二区三区| 精品久久久久久中文字幕大豆网| 91产国在线观看动作片喷水| 国精产品一区一区三区有限在线| 日韩亚洲欧美中文高清在线| 在线视频欧美日韩| 亚洲在线免费看| 91亚洲午夜在线| 国产精品v片在线观看不卡| 亚洲美女自拍视频| 538国产精品一区二区在线| 成人性生交大片免费看视频直播| 久久久噜久噜久久综合| 欧美第一页在线| 国产视频亚洲精品| 国产精品久久久久久久久免费看| 91在线精品播放| 91九色单男在线观看| 亚洲区免费影片| 91在线免费视频| 国产精品成久久久久三级| 久久久999精品免费| 在线免费观看羞羞视频一区二区| 777午夜精品福利在线观看| www国产91| 国产精品一区二区三区免费视频| 亚洲综合一区二区不卡| 久久99热精品这里久久精品| 伊人久久久久久久久久| 国产精品久久久久久久久影视| 国产精品丝袜一区二区三区| www.久久久久久.com| 欧美视频在线视频| 欧美日韩精品在线| 国产精品一区二区三区久久| 日韩成人久久久| 日韩中文字幕在线免费观看| 日韩欧美一区二区三区久久| 国产欧美日韩综合精品| 欧美激情aaaa| 欧美日韩国产精品| 久久99精品久久久久久青青91| 欧美国产日韩中文字幕在线| 国产精品福利在线观看网址| 欧美xxxx14xxxxx性爽| 欧美日韩另类在线| 亚洲国产精品va在线看黑人| 亚洲成av人乱码色午夜| 欧美亚洲国产视频| 国内精品久久影院| 国产精品偷伦一区二区| 午夜精品免费视频| 在线观看精品国产视频| 91精品国产高清久久久久久| 亚洲欧美日韩国产中文| 亚洲第一综合天堂另类专| 精品久久久久久电影| www.日韩系列| 国产精品女人久久久久久| 国产精品一区二区3区| 欧美性少妇18aaaa视频| 日韩av观看网址| 欧美激情亚洲精品| 国产精品美女久久| 亚洲国产精品视频在线观看| 91精品综合久久久久久五月天| 成人免费视频网| 亚洲国产精品99| 日韩精品久久久久| 国产乱肥老妇国产一区二| 欧美日韩国产中文精品字幕自在自线| 北条麻妃99精品青青久久| 成人写真福利网| 欧美精品免费看| 久久影视三级福利片| 日韩网站免费观看| 国产伦精品一区二区三区精品视频| 精品精品国产国产自在线| 日本成熟性欧美| 欧美精品久久久久久久久久| 亚洲片国产一区一级在线观看| 亚洲毛茸茸少妇高潮呻吟| 亚洲天堂免费视频| 亚洲大胆人体视频| 日韩av在线免费| 中文字幕在线成人| 久久中文精品视频| 欧美精品在线视频观看| 亚洲爱爱爱爱爱| 久久久久久尹人网香蕉| 欧美激情一区二区三区成人| 久久成人人人人精品欧| 久久久久免费精品国产|