1. npm-shrinkwrap 类似yarn.lock固定包的依赖 以及包内部的依赖
2. node-sass 在项目启动时经常报错,很多时候运行npm rebuild node-sass就好了,官网对rebuild命令的解释:
This command runs the npm build command on the matched folders. This is useful when you install a new version of node, and must recompile all your C++ addons with the new binary.
3.npm publish <package name>
在使用lerna publish的时候直接从0.1.0 跳到了 0.2.0 ,我们往往是很小版本的更新,可以手动更改version版本号,也可以使用npm version patch
更改最小的版本号
npm官网给的解释
How to Publish & Update a Package
How to Update the Version Number
When you make changes, you can update the package using
npm version <update_type>
where <update_type> is one of the semantic versioning release types, patch, minor, or major.
$ lerna publish --cd-version (major | minor | patch | premajor | preminor | prepatch | prerelease)
# uses the next semantic version(s) value and this skips `Select a new version for...` prompt
手动更改packages下面的某个包的version publish只会publish这个包,并且lerna会在你更改的基础上自动增加版本号
显示package信息
npm info <package name>
npm publish --tag=beta
第一次npm publish --tag=beta
的时候verdaccio的控制界面是能看到的,再次发正式版verdaccio就看不到beta的版本号了,想完整查看发版信息的话就用npm info <package name>
4. npm link
在自己开发的node 命令项目下使用npm link 将其软链接到全局执行环境,从而在系统的任意路径下都可以使用该cli工具。软连接的一个非常好用的地方在于,你改了项目中的代码,全局的cli也会跟着改变,很方便调试。
项目被软连接到了C:\Program Files\nodejs目录下,之前全局安装的cli是被安装到了C:\Users\bill\AppData\Roaming\npm下,不知道是不是更新了系统的原因,别人软链使用 NPM 发布和使用 CLI 工具
是在C:\Users\bill\AppData\Roaming\npm目录下的。
- 删除软链 npm unlink myModule
运行后项目的node_modules下的myModule软链就会消失,但是C盘全局的目录中的软链并不会消失。
如果node项目是cli项目,那么直接在该项目下使用npm link,其他项目中就可以直接使用bin下的命令了
-
如果项目只是普通的项目不是cli项目,需要到使用该包的项目下运行npm link myModule,这样myModule就会被软链到该项目的node_modules目录下,然后项目中就可以import 使用了
update-iconfont是项目名(name:“update-iconfont”)并不是cli命令的名字,link unlink都是项目名
如果想彻底删除全局目录下的软链 需要npm rm --global myModule
使用npm ls --global myModule查看有没有被删除成功
参考:
How do I uninstall a package installed using npm link?
npm模块管理器
package.json
{
"name": "update-iconfont",
"version": "0.0.1",
"description": "download or update iconfont",
"main": "index.js",
"bin": {
"udiconfont": "./bin/udicon.js"
},
"repository": "xxxx",
"author": "balibabu",
"license": "MIT",
"dependencies": {}
}
publish到npm后,使用npx udiconfont会报错
使用npx update-iconfont就不会报错。
5. git tag 和 npm version patch
纠结于升级package.json version的同时怎么同步更新git tag.尝试在项目下运行npm version patch
,结果:
- package.json name更新了
- git add 并commit ,commit message就是版本号 0.0.2
- git tag 此刻自动更新为v0.0.2
amazing
之前好像是不可以的,可能跟我的npm和git的版本有关系 - git version 2.20.1.windows.1
- npm -v 6.14.5 node -v v12.18.1
npm version patch -m "Upgrade to %s for reasons"
加上评论更明确目的。
6. yarn add html2pdf.js 报错
An unexpected error occurred: "https://raw.githubusercontent.com/eligrey/FileSaver.js/e865e3 7af9f9947ddcced76b549e27dc45c1cb2e/package.json: getaddrinfo ENOENT raw.githubusercontent.com raw. githubusercontent.com:443
其实这个错误并不是html2pdf.js 曝出来的,而是安装jspdf报错的。jspdf版本为1.5.3,降级安装jspdf@1.4.1就没问题。Cannot install jspdf 1.5.3。 html2pdf.js当前版本为0.9.2,到github看他的依赖,
package.json
"dependencies": {
"es6-promise": "^4.2.5",
"html2canvas": "^1.0.0-alpha.12",
"jspdf": "^1.4.1"
},
package.lock.json
"jspdf": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/jspdf/-/jspdf-1.4.1.tgz",
"integrity": "sha512-2vYVdrvrQUdKKPyWHw81t1jEYYAJ6uFJ/HtTcGbI4qXIQEdl18dLEuL2wTeSv2GzeQLSgUvEvwsXsszuHK+PTw==",
"requires": {
"canvg": "^1.0",
"cf-blob.js": "0.0.1",
"file-saver": "1.3.8",
"omggif": "1.0.7",
"stackblur": "^1.0.0"
}
},
yarn 依赖的版本对 ^ 字符范围 做了说明
字符 ^ 表明不会修改版本号中的第一个非零数字,3.1.4 里的 3 或者 0.4.2 里的 4。 如果不考虑package.lock.json锁定的版本,按照以上说法读取package.json中的dependencies版本信息的话,yarn add html2pdf.js的时候安装的就是jspdf的最新版本1.5.3.所以会报错。但是用npm install html2pdf.js就不会报错,安装是上的jspdf的版本是1.5.3,这就很费解。
yarn.lock
html2pdf.js@^0.9.2:
version "0.9.2"
resolved "https://registry.yarnpkg.com/html2pdf.js/-/html2pdf.js-0.9.2.tgz#9f6d2b57fcfe48ee6deb42e1b3eb56fe4e3a4b22"
integrity sha512-lWV/dZEDfwX6tGQ2mrjyMCiEgXp9bLn74nxzGkuzWYeWMJ/0col2BJfVI7rflh2vkQd7PXEHTZ6AYe7m8OPrlQ==
dependencies:
es6-promise "^4.2.5"
html2canvas "^1.0.0-alpha.12"
jspdf "^1.4.1"
dependencies 字段记录的是当前包的依赖,即当前包在 package.json 的 dependencies 字段中的所有依赖。
对于报错的解决办法就是先yarn add jspdf@1.4.1 然后再去yarn add html2pdf.js 。后面再安装检测到jspdf@1.4.1存在,符合依赖要求,这样的话就不会重复安装jspdf,合理的避开报错问题。
7. yarn
yarn global add weinre 安装全局依赖
yarn global ls 查看全局包
yarn global dir 查看全局包位置
8. weinre启动报错
$ weinre --boundHost 192.168.100.183
2020-10-21T02:29:35.849Z weinre: starting server at http://192.168.100.183:8080
(node:17320) [DEP0066] DeprecationWarning: OutgoingMessage.prototype._headers is deprecated
C:\Users\bill\AppData\Local\Yarn\Data\global\node_modules\connect\lib\middleware\static.js:144
type = mime.lookup(path);
^
TypeError: mime.lookup is not a function
(Use `node --trace-uncaught ...` to show where the exception was thrown)
解决办法:
找到connect\lib\middleware\static.js 更改21行为 mime = require('mime-types')
9. windows 上 npm publish 报错
Error: EPERM: operation not permitted, rename
解决办法:
关闭防火墙
I got the same problem just doing an npm install.
Run with antivirus disabled (if you use Windows Defender, turn off Real-Time protection and Cloud-based protection). That worked for me!
Error: EPERM: operation not permitted, rename
9. yarn 通过git url安装依赖
- http方式
yarn add <git remote url>#<branch/commit/tag> installs a package from a remote git repository at specific git branch, git commit or git tag.
比如:
yarn add https://gitee.com/qihoo360/spriteJS.git\#v3.0.6
- ssh方式
需要在前面加上 git+ssh://
yarn add git+ssh://git@github.com:ccorcos/oy.git#0.10.1
一般通过git url的时候会缓存,yarn cache dir
找到缓存目录,该目录下有个.tmp目录,存放所有通过git url 安装的依赖缓存,且该缓存的代码是master分支的,并不是我安装tag的代码,不是很理解