npm命令及npm scripts的簡單總結

来源:http://www.cnblogs.com/webxiaochou/archive/2017/04/04/6664906.html
-Advertisement-
Play Games

npm使用方法和命令 "官網" , "文檔" 顯示配置信息 更詳細 顯示幫助信息,建議多查看 display full usage info ; l is long 顯示某個命令的幫助信息 修改npm全局安裝目錄 修改npm cache目錄 把新的npm路徑修改到系統環境變數中,才可生效 設置npm ...


npm使用方法和命令

官網,文檔


npm config list/ls 顯示配置信息
npm config list/ls -l 更詳細
npm -h 顯示幫助信息,建議多查看
npm -l display full usage info ;-l is --long
npm <cmd> -h 顯示某個命令的幫助信息
npm help npm
npm help <term>

npm config set prefix path 修改npm全局安裝目錄
npm config set cache path 修改npm cache目錄
把新的npm路徑修改到系統環境變數中,才可生效
npm config set registry='https://registry.npm.taobao.org/' 設置npm資源鏡像,加快下載安裝速度,還有其他鏡像

npm ls 顯示工程目錄下本地安裝的包,--depth=0,顯示初級依賴層次
npm -g ls 顯示全局安裝的包
npm i/install --save xxx 安裝包信息將加入到dependencies(生產階段的依賴)
npm i/install --save-dev xxx 安裝包信息將加入到devDependencies(開發階段的依賴),所以開發階段一般使用它
npm i --save-exact xxx 精確安裝包版本,package.json里的依賴包的value是具體的版本號,前邊沒有符號
npm root 查看包的安裝路徑,及node_modules的路徑
npm view modulename 查看模塊的package.json信息
npm view moudleName dependencies 查看包的依賴關係
npm view moduleName repository.url 查看包的源文件地址
npm view moduleName engines 查看包所依賴的node版本
npm outdated 檢測顯示過時的包
npm update 更新包
npm uninstall 卸載包
npm init 在項目中引導創建一個package.json文件

縮寫選項:

Shorthands and Other CLI Niceties

The following shorthands are parsed on the command-line:

-v: --version
-h, -?, --help, -H: --usage
-s, --silent: --loglevel silent
-q, --quiet: --loglevel warn
-d: --loglevel info
-dd, --verbose: --loglevel verbose
-ddd: --loglevel silly
-g: --global
-C: --prefix
-l: --long
-m: --message
-p, --porcelain: --parseable
-reg: --registry
-f: --force
-desc: --description
-S: --save
-D: --save-dev
-O: --save-optional
-B: --save-bundle
-E: --save-exact
-y: --yes
-n: --yes false
ll and la commands: ls --long


npm scripts

參考多個網路資源:

npm scripts 是指npm對於package.json文件中"scripts"屬性的處理,通過該屬性,npm 可以執行命令。

使用不帶參數的npm run,顯示package.json里所有的script腳本命令及內容。

npm run 會創建一個新的shell,執行指定的命令,並將node_modules/.bin 加入 PATH 變數。當腳本內容結束,則子 shell 關閉,回到父 shell 中。

由於 npm 腳本的唯一要求就是可以在 Shell 執行,因此它不一定是 Node 腳本,任何可執行文件都可以寫在裡面。
npm 腳本的退出碼,也遵守 Shell 腳本規則。如果退出碼不是0,npm 就認為這個腳本執行失敗。

向npm run xx傳入參數必須用--表明

執行順序:
$npm run xx & npm run xxx同時並行執行
$npm run xx && npm run xxx 前一個執行成功,再執行最後一個


例如:

{
    "scripts": {
        "lint": "eslint"
    }
}

目錄終端中,執行npm run-script lint啟動lint命令,也可簡化為npm run lint;實際是執行了node_modules/.bin/eslint。
項目目錄下的node_modules/.bin/目錄專門存放安裝包的可執行程式。

內置的幾個npm 命令

  • start: 執行 npm start
  • test: 執行 npm test
  • stop: 執行 npm stop
  • restart: 執行 npm restart。npm restart是一個複合命令,實際上會依次執行三個腳本命令:stop、restart、start。prerestart>prestop>stop>poststop>restart>prestart>start>poststart>postrestart

pre 和 post hooks

雙重的pre和post無效,比如prepretest和postposttest是無效的。

{
    "scripts":{
        'prexxx':,
        'xxx':,
        'postxxx':,
    }
}

執行npm run xxx後,預設執行順序:npm run prexxx > npm run xxx > npm run postxxx
一些內置的命令如:start ,執行npm start,會預設執行: npm run prestart > npm run start > npm run poststart。詳見官網


{
    "scripts":{
        "build:dev":"xxxx",//npm run build:dev
        "build:prod":"xxx"//npm run build:prod
    }
}

環境變數

通過npm_package_首碼,npm 腳本可以拿到package.json裡面的欄位
若package.json中有{"version":xxx,"name":xx},則npm 在scripts中添加環境變數: npm_package_name 和 npm_package_version。
在*.js文件中可以使用process.env.npm_package_xxx引入
還可自定義變數:
config 欄位也可以用於設置內部欄位

{
    "config": {
        "port": 1111
    }
    //則scripts中可以引入
    "scripts":{//bash腳本
        "xxx":"xxx ${npm_package_config_port}/$npm_package_config_port"
    }
}

npm_lifecycle_event

npm 正在執行哪個script,npm_lifecycle_event就返回當前正在運行的腳本名稱。


為什麼使用 npm Scripts 構建項目

參考鏈接,這裡摘抄幾點:

Gulp 與 Grunt 的不足

總得來說就是 Gulp 與 Grunt 引入了一層複雜但是多餘的抽象層,用來抽象直接的構建命令,比如gulp-uglify和grunt-contrib-uglify用來包裝uglifyjs命令。這層抽象所建立的插件生態帶來了很多問題:

額外的抽象,帶來了額外的學習成本;
插件依賴作者,無論是插件質量、設計合理性、文檔、更新及時性等嚴重依賴作者自身的水平與投入;
為什麼 npm scripts 先前使用的人不多?這可能是因為很多人存在對 npm scripts 的誤解:
人們認為 npm scripts 需要熟悉命令行技能;
人們認為 npm scripts 不夠強大;
人們認為 Gulp 的流(stream)對於快速構建是必須的;
人們認為 npm scripts 不能跨平臺;

而真相是:

npm scripts 並不需要熟悉命令行技能,當然熟悉的話更好;
npm scripts 可以完成絕大多數 Grunt 與 Gulp 完成的任務,實在不行還可以寫 NodeJS 代碼來完成;
因為 npm scripts 在一個 Shell 環境中執行的,而 Shell 天生支持流;
幾個常見的命令操作符&&/</>/|是跨平臺的,對於一些 Linux/Mac 中的 Shell 命令可以使用 shelljs 來實現跨平臺;
而 npm scripts 的不足是由於package.json文件不可以寫註釋,對於複雜的構建任務,代碼可讀性很差。這個可以儘量通過貼切的命名,任務細分來減輕。另外就是需要熟悉各構建工具的命令行使用方式。


使用npm scripts構建項目

使用npm scripts 和 webpack 構建項目
2個鏈接:


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • [1]前端架構 [2]版本管理 [3]命令行工具 [4]編輯器 [5]預處理器 ...
  • 原文鏈接:http://www.jianshu.com/p/42e11515c10f 什麼是WebPack,為什麼要使用它? 為什要使用WebPack 現今的很多網頁其實可以看做是功能豐富的應用,它們擁有著複雜的JavaScript代碼和一大堆依賴包。為了簡化開發的複雜度,前端社區涌現出了很多好的實 ...
  • 首先要瞭解何為跨域,(協議、功能變數名稱、埠任意一個不同)的web資源。如何解決跨域:1,jsonp 它只支持GET請求而不支持POST等其它類型的HTTP請求;例如angular 中,如下使用,$http.jsonp('some/trusted/url', {jsonpCallbackParam: 'c ...
  • 什麼是模板引擎 模板引擎是為了使用戶界面與業務數據(內容)分離而產生的,它可以生成特定格式的文檔,用於網站的模板引擎就會生成一個標準的HTML文檔.其本質是利用正則表達式,替換模板當中預先定義好的標簽. 常用模板引擎 "ArtTemplate" "BaiduTemplate" "velocity.j ...
  • 什麼是ajax Ajax(Asynchronous JavaScript and XML),是一種可以向伺服器請求額外的數據並且無需刷新頁面的技術,ajax的出現帶來了更好的用戶體驗. Ajax的核心就是XMLHttpRequest(XHR)對象.XHR為向伺服器發送請求和解析伺服器響應提供了流暢的 ...
  • 簡介:講解webpack如何實現模塊編程,以及為什麼我們需要打包,壓縮js文件,實現sass/less編譯以及JSX等模版的轉換(版本控制),然後用實例說明如何用webpack實現SPA和MPA(單頁面應用程式和多頁面應用程式,包含詳細圖解)(在以後的文章中還將介紹如何實現js壓縮和sass/les... ...
  • 最近項目上有一個需求是:根據一張圖片的拍攝時間獲取到這個時間前二後三的一個五秒鐘的視頻信息,通過查找相關資料寫了一個方法拿來記錄分享一下。 //指定時間減2秒function reduceTwoS(dateStr){//dateStr格式為yyyy-mm-dd hh:mm:ss var dt=new ...
  • 問題 註冊安卓硬體返回按鈕事件是必須的,因為用戶不小心點擊了返回按鈕就退出app體驗很不好,所以有幾種方法: 1.實現按返回鍵最小化應用(最小化應用需要裝 插件,使用 )。 2.要麼請求用戶確認(添加一個Confirmation Alerts)。 3.按一下提示,按兩下退出(加一個方法用toast提 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...