安装最新版express
npm install express -g
安装指定版本express
npm install [email protected]
删除express
npm remove express -g
npm更新
npm i -g npm
空白目录下执行npm init生成package.json文件
npm init
即需要卸载Node JS。
步骤:
where node
,如果输出:信息: 用提供的模式无法找到文件
说明环境变量已经清除减轻C盘负担,先提前创建好目录:
npm config set prefix "D:\Program Files\nodejs\node_global"
npm config set cache "D:\Program Files\nodejs\node_cache"
验证:npm install -g express
确实安装到新的目录。
npm config set registry https://registry.npm.taobao.org
npm install -g cnpm --registry=https://registry.npm.taobao.org
npm的package.json文件类似于,maven的pom.xml,pip的requirements.txt文件。文件样例:
{
"name": "test",
"version": "0.0.1",
"description": "This is for study gulp project!",
"homepage": "",
"repository": {
"type": "git",
"url": "https://git.oschina.net/xxxx"
},
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": {
"name": "awesome",
"email": "[email protected]"
},
"license": "ISC",
"devDependencies": {
"gulp": "^3.8.11",
"gulp-less": "^3.0.0"
}
}
文件解读:
Node.js 在调用某个包时,会首先检查包中 package.json 文件的 main 字段,将其作为包的接口模块,如果 package.json 或 main 字段不存在,会尝试寻找 index.js 或 index.node 作为包的接口。
package.json 是 CommonJS 规定的用来描述包的文件,完全符合规范的 package.json 文件应该含有以下字段:
npm安装package.json时,直接到当前项目目录下用命令npm install
或npm install --save-dev
即可,自动将package.json中的模块安装到node-modules文件夹下。
Node JS各个目录的含义:
major.minor.patch
主版本号·次版本号·修补版本号
~version
大概匹配某个版本,如果minor版本号指定,那么minor版本号不变,而patch版本号任意;如果minor和patch版本号未指定,那么minor和patch版本号任意。
实例:
~1.1.2
,表示>=1.1.2 <1.2.0,可以是1.1.2,…,1.1.n
~1.1
,表示>=1.1.0 <1.2.0,可以是同上
~1
,表示>=1.0.0 <2.0.0,可以是1.0.0,1.0.1,…,1.0.n,1.1.n,1.2.n,…,1.n.n
^version
兼容某个版本,版本号中最左边的非0数字的右侧可以任意;如果缺少某个版本号,则这个版本号的位置可以任意。
示例:
^1.1.2
,表示>=1.1.2 <2.0.0,可以是1.1.2,1.1.3,…,1.1.n,1.2.n,…,1.n.n
^0.2.3
,表示>=0.2.3 <0.3.0,可以是0.2.3,0.2.4,…,0.2.n
^0.0
,表示 >=0.0.0 <0.1.0,可以是0.0.0,0.0.1,…,0.0.n
x-range
x的位置表示任意版本
1.2.x
,表示可以1.2.0,1.2.1,…,1.2.n
*-range
任意版本,""也表示任意版本
如:*,表示>=0.0.0的任意版本
version1 - version2
大于等于version1,小于等于version2
range1 || range2
满足range1或者满足range2,可以多个范围
如:<1.0.0 || >=2.3.1 <2.4.5 || >=2.5.2 ❤️.0.0,表示满足这3个范围的版本都可以
"dependencies": {
"bluebird": "^3.3.4",
"body-parser": "~1.15.2"
}
当使用最新的Node运行npm instal --save xxx
时,node会优先考虑使用插入符号(^)而不是波浪符号(~)
波浪符号~
:会更新到当前minor version中最新的版本。放到我们的例子中就是:body-parser:~1.15.2,这个库会去匹配更新到1.15.x的最新版本,如果出了一个新的版本为1.16.0,则不会自动升级。波浪符号是曾经npm安装时候的默认符号,现在已经变为了插入符号。
插入符号^
:把当前库的版本更新到当前major version(也就是第一位数字)中最新的版本。放到我们的例子中就是:bluebird:^3.3.4,这个库会去匹配3.x.x中最新的版本,但是他不会自动更新到4.0.0。
总结:
~1.15.2 := >=1.15.2 <1.16.0
^3.3.4 := >=3.3.4 <4.0.0
因为major version变化表示可能会影响之前版本的兼容性,所以无论是波浪符号还是插入符号都不会自动去修改major version,因为这可能导致程序crush,可能需要手动修改代码。
显而易见,没有权限,一般这种问题出现在Windows系统,以管理员权限执行即可。
环境:windows 10
node版本:v8.11.3
npm版本:5.6.0
以管理员角色执行命令:npm install -g [email protected]
,报错信息如下:
npm ERR! code ETIMEDOUT
npm ERR! errno ETIMEDOUT
npm ERR! network request to https://registry.npmjs.org/mountebank failed, reason: connect ETIMEDOUT 104.16.21.35:443
npm ERR! network This is a problem related to network connectivity.
npm ERR! network In most cases you are behind a proxy or have bad network settings.
npm ERR! network
npm ERR! network If you are behind a proxy, please make sure that the
npm ERR! network 'proxy' config is set properly. See: 'npm help config'
npm ERR! A complete log of this run can be found in:
npm ERR! D:\Users\awesome.wang\AppData\Roaming\npm-cache\_logs\2019-03-15T05_59_45_514Z-debug.log
解决方法:
# 清除缓存
npm config set proxy false
# 清除缓存
npm cache clean
其中执行第二条命令时,输出信息:
npm ERR! As of npm@5, the npm cache self-heals from corruption issues and data extracted from the cache is guaranteed to
be valid. If you want to make sure everything is consistent, use 'npm cache verify' instead.
npm ERR!
npm ERR! If you're sure you want to delete the entire cache, rerun this command with --force.
npm ERR! A complete log of this run can be found in:
npm ERR! D:\Users\awesome.wang\AppData\Roaming\npm-cache\_logs\2019-03-15T06_26_44_708Z-debug.log
忽视,执行命令: npm cache clean --force
,再次执行安装命令成功;
报错信息如下:
npm ERR! code EINTEGRITY
npm ERR! sha512-364AI1l/M5TYcFH83JnOH/pSqgaNnKmYgKrm0didZMGKWjQB60dymwWy1rKUgL3J1ffdq9xVi2yGLHdSjjSNog== integrity checksum failed when using sha512: wanted sha512-364AI1l/M5TYcFH83JnOH/pSqgaNnKmYgKrm0didZMGKWjQB60dymwWy1rKUgL3J1ffdq9xVi2yGLHdSjjSNog== but got sha512-iWmhthtl+IsMNAJ9PO042EoelEEy/IB9mub9MMHrY5iCTrZ7G4AcdWPTmZff9QrFcW8EAGjwgukRJq3fXf+U4g==. (25383 bytes)
npm ERR! A complete log of this run can be found in:
npm ERR! C:\Users\awesome\AppData\Roaming\npm-cache\_logs\2018-10-20T01_44_36_739Z-debug.log
解决方法:
1.如果有package-lock.json文件,就删掉
2.管理员权限进入cmd
3.执行npm cache clean --force
4.之后再npm install
有时候网不好也会出现问题,多试几次。
参考
先删除package-lock.json文件,然后执行:npm install
。
在使用npm时,有时需要删除node_modules文件夹,但是使用管理员权限并不能删除干净,及时退出各种应用程序,也不行;再说一个个程序退出也很麻烦。
npm install rimraf -g
rimraf node_modules
执行npm install apidoc -g
报错:
npm ERR! Windows_NT 6.1.7601
npm ERR! argv "c:\\Program Files\\nodejs\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "install" "apidoc" "-g"
npm ERR! node v6.11.3
npm ERR! npm v3.10.10
npm ERR! code EPROTO
npm ERR! errno EPROTO
npm ERR! syscall write
npm ERR! write EPROTO 101057795:error:14077419:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert access denied:openssl\ssl\s23_clnt.c:772:
npm ERR!
npm ERR!
npm ERR! If you need help, you may report this error at:
npm ERR!
npm ERR! Please include the following file with any support request:
npm ERR! C:\Program Files\nodejs\npm-debug.log
还有其他一些莫名其妙,不明所以的信息。
解决方法:
npm cache clean --force
记住:重试,管理员权限,清除缓存,可以解决70%的npm使用问题。
出现这个问题的背景:想要升级npm,当前版本号
npm -v
5.4.2
升级:
npm install npm -g
C:\Users\johnn\AppData\Roaming\npm\npx -> C:\Users\johnn\AppData\Roaming\npm\node_modules\npm\bin\npx-cli.js
C:\Users\johnn\AppData\Roaming\npm\npm -> C:\Users\johnn\AppData\Roaming\npm\node_modules\npm\bin\npm-cli.js
+ [email protected]
added 195 packages, removed 352 packages and updated 58 packages in 58.633s
│ Update available 5.3.0 → 7.5.4 │
│ Run npm i -g npm to update │
此时无论敲入npm i -g npm
还是npm -v
命令,都输出:
TypeError [ERR_INVALID_ARG_TYPE]: The "original" argument must be of type function
at promisify (internal/util.js:206:11)
at Object. (C:\Users\johnn\AppData\Roaming\npm\node_modules\npm\node_modules\@npmcli\move-file\index.js:26:18)
at Module._compile (module.js:573:30)
at Object.Module._extensions..js (module.js:584:10)
at Module.load (module.js:507:32)
at tryModuleLoad (module.js:470:12)
at Function.Module._load (module.js:462:3)
at Module.require (module.js:517:17)
at require (internal/module.js:11:18)
at Object. (C:\Users\johnn\AppData\Roaming\npm\node_modules\npm\node_modules\cacache\lib\util\move-file.js:8:14)
C:\Users\johnn\AppData\Roaming\npm\node_modules\npm\node_modules\@npmcli\config\lib\index.js:163
throw new Error('call config.load() before reading values')
^
Error: call config.load() before reading values
at Config.get (C:\Users\johnn\AppData\Roaming\npm\node_modules\npm\node_modules\@npmcli\config\lib\index.js:163:13)
at process.errorHandler (C:\Users\johnn\AppData\Roaming\npm\node_modules\npm\lib\utils\error-handler.js:171:32)
at emitOne (events.js:115:13)
at process.emit (events.js:210:7)
at process._fatalException (bootstrap_node.js:349:26)
npm安装时间是2017.09.12,升级失败。
解决方案:卸载(往上看前文),重新安装。
应用启动失败,报错信息如下:
Browserslist: caniuse-lite is outdated. Please run:
npx browserslist@latest --update-db
Why you should do it regularly:
https://github.com/browserslist/browserslist#browsers-data-updating
Starting the development server...
解决方法,执行命令:npm update caniuse-lite
,命令行输出:
up to date, audited 2250 packages in 13s
202 packages are looking for funding
run `npm fund` for details
57 vulnerabilities (11 low, 8 moderate, 30 high, 8 critical)
To address issues that do not require attention, run:
npm audit fix
To address all issues possible (including breaking changes), run:
npm audit fix --force
Some issues need review, and may require choosing
a different dependency.
Run `npm audit` for details.
再执行命令:npm audit fix --force
,注意,执行命令:npm audit fix
,应用依旧启动失败。
以及其他启动失败报错信息:
AssertionError [ERR_ASSERTION]: chunk of umi not found.
解决方法:删除src下的.umi
文件夹,执行npm start:no-mock
解决前端应用启动问题
npm-wont-install-packages-npm-err-network-tunneling-socket-could-not-be-estab