前言
什么?npm还要学么?确实不咋需要学,所以推荐你看这篇文章。
你用的npm
前些日子Github把NPM纳入自家后宫,这个完虐pip的最大的包管理器从此也有了微软的印记。最近想打包个项目发到NPM上去,自然要对npm进行全面的学习。
我们平时使用npm,大多是使用npm run scripts,npm install xxx之类的,所以下面的讲解首先从npm install这种最常见的开始。
npm init/install/scripts
npm init --yes,初始化项目文件时候使用,这个没什么好说的。
npm install,这个就有的说了,后面跟着的是一个package,这里我们不介绍详细的npm版本更新对于package安装带来的内在改变,还是从使用来说。
我们知道npm install主要有四种方式:
npm install xxx
npm install --save xxx(-S)
npm install --save-dev xxx(-D)
npm install -g xxx
首先第一个我们知道是,第一种情况下,当我们npm install时是不会自动安装的,所以一般没啥场景需要这个。
第二种则是生产依赖,dependency下,第三种是开发依赖,dev-dependency下。
第四种是全局安装,这个没什么好讲的。
提到了dependency那就不得不说说剩下的peerDependency,平时这个东西很少用到,一般与某些插件开发相关。这篇文章很好的讲解了peerdep的情况,总结一下就是a插件依赖b包的版本,1.0的b包支持,2.0的b包不支持,这样我们在a插件的peerdev指定b的版本后,当我们安装a和2.0b的时候就会报警告:
UNMET PEER DEPENDENCY ...
除此之外,发布组件库时因为React之类的东西也不应该放在dependency中,但是我们知道没有React,这个组件库也没有意义,所以我们需要peerdependency为我们做个提醒。
最后是scripts,这个可能是我们平时手动修改package.json最多的选项了,修改之后就能使用npm run…来执行某指令,同时也不用担心没有配置环境变量之类的问题。
npx
npx是相对新一点的东西,但是非常好用。
首先npx 可以下载而不安装某个东西,典型的就是CRA这种只运行一次的脚手架工具,当然网速也是个问题。
其次npx可以执行内部指令而不用担心环境变量的问题。
最后还可以执行Github一些模块。
其他
还有一些是package.json的字段,这里简单列举几个常用的:
"description": "React Component Library",
"author": "eswang",
"license": "MIT",
"keywords": [
"React",
"Component",
"UI",
"Material"
],
"homepage": "",
"repository": {
"type": "git",
"url": "https://github.com/starinsun/xxx"
},
Semver
最后是语义化版本,我们熟悉的就是大更新的先行版本alpha: 内部版本,beta:公测版本,rc: 即Release candiate,正式版本的候选版本。
然后是版本号,严格遵守XYZ的规范,如:1.1.1,分为主版本号(如不兼容API),次版本号(向下兼容的新增内容),修订号(向下兼容问题修正)。而上文所说的先行版本则放在这个的后面。
这些东西其实是我们经常忽略的,毕竟现在编辑器插件让我们操作起来package.json也极其方便了:
兼容模块新发布的补丁版本:~16.2.0、16.2.x、16.2
兼容模块新发布的小版本、补丁版本:^16.2.0、16.x、16
兼容模块新发布的大版本、小版本、补丁版本:*、x
总结
npm还有些指令这里没有讲,如怎么查看全局包:
npm list -g --depth 0
顺带说一嘴yarn是yarn global list,但是npm这样用的话,你可以试试。。。