概述
npm 是 node package manager (node包管理器)
隨著node安裝,自帶的包是系統包,非自帶的包,稱之為第三方包
npm在國外,cnpm是中國版的npm
安裝cnpm - npm install -g cnpm --registry=https://registry.npm.taobao.org
npm的一些配置
- 常用配置:
- 查看包的下載源 -
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
- 通過第三方工具(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 -Dcss-loader style-loader - 解析樣式,打包寫入html的style里
npm install style-loader css-loader -Dcss3 - 樣式后綴自動添加
npm install postcss-loader autoprefixer -Dfile-loader url-loader (依賴file-loader)
npm install url-loader file-loader -Dless - css預處理
npm install less-loader less -Dwebpack-dev-server - 熱更新調試工具
npm install webpack webpack-cli webpack-dev-server -Dserve - 創建一個靜態托管服務器
如果您想要提供一個靜態站點、單頁面應用程序或一個靜態文件(無論是在您的設備上還是在本地網絡上),這個包是您正確的選擇
安裝 -npm install serve
使用 -serve 指定文件夾
- 在指定目錄下serve
安裝報錯相關
- 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
- 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)
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
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+版本報錯