npm 操作零散整理

概述
npm 是 node package manager (node包管理器)
隨著node安裝,自帶的包是系統包,非自帶的包,稱之為第三方包

npm在國外,cnpm是中國版的npm
安裝cnpm - npm install -g cnpm --registry=https://registry.npm.taobao.org

npm的一些配置

  1. 常用配置:
  • 查看包的下載源 - npm get registry
  • 修改npm下載源為淘寶鏡像 - 'npm config set registry http://registry.npm.taobao.org' - 已棄用
    公告說明以及新的地址: http://www.npmmirror.com/
  • 修改npm下載源為淘寶鏡像 - npm config set registry http://www.npmmirror.com
  • 修改npm下載源為官方源 - npm config set registry http://www.npmjs.org
  1. 通過第三方工具(nrm),來方便切換源
  • 安裝 - npm install -g nrm
  • 使用nrm命令nrm ls查看源列表,以及激活的源
* npm -------- https://registry.npmjs.org/
  yarn ------- https://registry.yarnpkg.com/
  cnpm ------- http://r.cnpmjs.org/
  taobao ----- https://registry.npm.taobao.org/
  nj --------- https://registry.nodejitsu.com/
  npmMirror -- https://skimdb.npmjs.com/registry/
  edunpm ----- http://registry.enpmjs.org/

注: * 表示當當前正在使用的源

  • 使用nrm來切換源 - nrm use taobao

常用的系統包

官方文檔 - http://nodejs.cn/api/

(一).assert (斷言)
格式
assert(條件,結果)
例1:

const assert = require('assert');
assert(10>1,'aaa'); 成立則輸出aaa

例2:

assert.deepEqual(變量,預期值,msg);

例3:深度比較 assert.deepStrictEqual(數據1,數據2);

assert.deepStrictEqual({ a: 1 }, { a: '1' });

使用場景:
1.大型項目,眾多函數調用情況下,判斷某一個流程節點的值,是否正確,符合預期
2.函數傳參時候,判斷參數情況

(二).path (路徑)

  • path.dirname 返回目錄名
  • path.extname 返回擴展名
  • path.join() 使用平臺特定的分隔符作為定界符將所有給定的 path 片段連接在一起
  • path.parse(path) 將路徑字符串轉化為對象信息
  • path.resolve(__dirname,'xxx') 將路徑或路徑片段的序列解析為絕對路徑

1.獲取文件路徑

let res = path.dirname(str); 

2.獲取文件拓展名

let res = path.extname(str); 

3.獲取文件名

let res = path.basename(str); 

4.path.resolve(路徑,文件名);
path.resolve() 方法將路徑或路徑片段的序列解析為絕對路徑
例:獲取當前程序執行路徑 / 文件名

path.resolve(__dirname,文件名); 

__dirname : 魔術變量 ,未聲明情況即可使用

(三).url (網址)
解析路徑信息,并將query轉化為對象形式
url.parse(路徑,true)

(四).querystring (在字符串和對象之間相互轉化)
字符串 -> 對象

querystring.parse("a=1&b=2");  //{a:1,b:2}

對象 -> 字符串

querystring.stringify({a:1,b:2});  //a=1&b=2

第三方包

  • es6 - js低版本瀏覽器兼容
    npm install babel-loader @babel/core @babel/preset-env -D

  • css-loader style-loader - 解析樣式,打包寫入html的style里
    npm install style-loader css-loader -D

  • css3 - 樣式后綴自動添加
    npm install postcss-loader autoprefixer -D

  • file-loader url-loader (依賴file-loader)
    npm install url-loader file-loader -D

  • less - css預處理
    npm install less-loader less -D

  • webpack-dev-server - 熱更新調試工具
    npm install webpack webpack-cli webpack-dev-server -D

  • serve - 創建一個靜態托管服務器
    如果您想要提供一個靜態站點、單頁面應用程序或一個靜態文件(無論是在您的設備上還是在本地網絡上),這個包是您正確的選擇
    安裝 - npm install serve
    使用 - serve 指定文件夾 - 在指定目錄下 serve

安裝報錯相關

  1. npm 安裝報錯鏈接失敗
error code ENOTFOUND
error errno ENOTFOUND
error network request to https://npm.***.com/..... failed, reason: getaddrinfo ENOTFOUND npm.***.com npm.***.com:443
error network In most cases you are behind a proxy or have bad network settings.

解決方法:
嘗試更換淘寶鏡像源 - npm config set registry http://www.npmmirror.com
再安裝依賴可能會成功,如果依然連接資源超時
找到 /Users/你的計算機名/.npmrc文件
通過注釋掉代理來看看效果

// 這一行前面加#
#proxy=http://xxxx.xxx.xxx.xxx:xxxx
  1. npm 安裝bcrypt包錯誤
    通過npm官網下載三方安裝包
    偶爾會出現安裝失敗的情況
    即便是安裝完畢,且在package.json已經存在依賴項目,但是其實node_modules中也存在缺少核心文件的情況,在運行時候會報錯

一般出現這個情況,可以查看下npm官網上的包信息

包的版本,是否符合環境的版本
查看:
Version Compatibility(版本兼容性)
以bcrypt為例,其版本需要node版本與之適應,如:

Node Version Bcrypt Version
8 >= 1.0.3
10, 11 >= 3
12 >= 3.0.6

報錯信息:
gyp ERR! stack Error: "pre" versions of node cannot be installed, use the --nodedir flag instead

安裝包是否有無安裝必備的電腦環境變量
查看:
Dependencies (依賴項)
以bcrypt為例,依賴項如下等:

NodeJS
node-gyp
Python 2.x

報錯信息:
缺少python環境
注:
有的包存在明確的版本號,如 Python 2.x ,其環境版本信息要符合要求

安裝 bcrypt 失敗 (典型例子)

【 問題的原因】:

  • 缺少python2.x環境引起的問題
    下載:
https://www.python.org/downloads/release/python-2716/

安裝:(注意勾選添加環境變量)


添加至環境變量

默認是阻止添加到環境變量的,
如果選擇默認,后續自行添加python到系統環境變量會失敗(重啟也不好使,不知道原因)

  • 在已經添加python環境的情況下,仍警告,且報錯,添加失敗
node-pre-gyp WARN Using needle for node-pre-gyp https download 
node-pre-gyp WARN Tried to download(404): https://github.com/kelektiv/node.bcrypt.js/releases/download/v3.0.7/bcrypt_lib-v3.0.7-node-v64-win32-x64-unknown.tar.gz 
node-pre-gyp WARN Pre-built binaries not found for bcrypt@3.0.7 and node@10.16.0 (node-v64 ABI, unknown) (falling back to source compile with node-gyp)

總是說這個404
https://github.com/kelektiv/node.bcrypt.js/releases/download/v3.0.7/bcrypt_lib-v3.0.7-node-v64-win32-x64-unknown.tar.gz

【解決方法】:
1.打開命令窗口法1(管理員身份打開cmd)
找到(C:\WINDOWS\system32\cmd.exe)文件,右鍵以管理員身份運行

1.2.打開命令窗口法2 (使用管理員身份打開powerShell)


powerShell管理員運行

1.3 補充 兩者區別
PowerShell是跨平臺的,cmd是Windows專用的。
PowerShell有面向對象的管道。
PowerShell能夠調用.NET的很多功能

2.安裝node 的Python的編譯
npm install -g node-gyp

3.添加window構建工具(Visual Studio Build Tools)
如果已經安裝了python就不再安裝了,
如果沒有安裝,會進行自動安裝
npm install --global --production windows-build-tools

安裝VS構建工具

4.如果是上一步,自動安裝的python,需要手動配置項目python環境
npm config set python Python 2.7.16 (Python 2.7.16 你安裝的版本號)

npm config set python "D:\mysoft\python\python.exe"(python.exe 你安裝的執行文件地址)

  • 再次嘗試npm install bcrypt -S,

1.如果安裝不成功,仍警告,仍報錯
解決方法:
使用 cnpm install bcrypt -S ,應該可以安裝成功了

2.如果單純是警告,不在報錯,則可以忽略了

node-pre-gyp WARN Using needle for node-pre-gyp https download 
node-pre-gyp WARN Tried to download(404): https://github.com/kelektiv/node.bcrypt.js/releases/download/v3.0.7/bcrypt_lib-v3.0.7-node-v64-win32-x64-unknown.tar.gz 
node-pre-gyp WARN Pre-built binaries not found for bcrypt@3.0.7 and node@10.16.0 (node-v64 ABI, unknown) (falling back to source compile with node-gyp)

+ bcrypt@3.0.7
added 57 packages from 46 contributors and audited 296 packages in 36.877s
found 0 vulnerabilities

終于安裝成功了~~~!

疑問:
不太明白,為什么在npm上 bcrypt的依賴項目中 標明了Python 2.x,
在安裝了 Python 2.7.16 且添加至環境變量的情況下,
使用npm安裝,依然去找一個https://github.com/kelektiv/node.bcrypt.js/releases/download/v3.0.7/bcrypt_lib-v3.0.7-node-v64-win32-x64-unknown.tar.gz,然后給你報錯

在linux的centos下,安裝"bcrypt": "^3.0.7" 版本錯誤

1.通過npm三方包 n , 將nodejs版本降低到 v10.16.0
2.通過 使用 yum update 指令更新 python版本
3.查看路徑 usr/lib/下的python版本 如果為2.7
測試沒問題, 而nodejs最新12+版本報錯

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。