package.json常用配置 npm install原理 npm link

package.json常用配置:

  • name(必填)项目的名称
  • version: (必填)当前项目的版本号
  • main:入口文件(前端因为有webpack的存在基本上用不到,只是作为发布的时候别人下载下来用的时候的入口文件)
  • description: 描述信息
  • author:作者信息(发布时用到)
  • license:开源协议(发布时用到)
  • private:是否为私密(设置为true不可以发布)
  • requires:子依赖,也就是这个大的依赖还依赖着其他的包
  • resolved:具体的registry下载地址
  • integrity:用来从缓存中获取索引,再通过索引去获取压缩文件
    例如:axios中还依赖follow-redirects
"axios": {
      "version": "0.21.0",
      "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.0.tgz",//指定安装的是registry的0.21.0的版本的压缩文件(tgz)
      "integrity": "sha512-fmkJBknJKoZwem3/IKSSLpkdNXZeBu5Q7GA/aRsr2btgrptmSCxi2oFjZHqGdK9DoTil9PIHlPIZw2EcRJXRvw==",//
      "requires": {
        "follow-redirects": "^1.10.0"
      }
},

在这里插入图片描述

script:脚本执行

我们都知道执行某个js文件的时候我们通过:node index.js来执行index.js的文件

而我们也可以设置package.json自定义脚本名并通过npm run 来达到相同的效果:

package.json中设置:

"scripts": {
    "renameNode": "node index.js"//renameNode就是我们run的指令,value值为我们代替的命令行
},

此时我们输入npm run renameNode:
在这里插入图片描述
即可达到node index.js一样的效果



  • dependencies:无论是开发环境还是生成环境都需要依赖的包(带有版本号)
"dependencies": {
    "element-ui": "^2.13.2",
    "vue": "^2.6.11",
    "vue-router": "^3.2.0",
    "vuex": "^3.4.0"
},
  • devDependencies: 一些包是生成环境下不需要的:如webpack,babel等
"devDependencies": {
    "@vue/cli-plugin-babel": "~4.5.0",
    "@vue/cli-plugin-eslint": "~4.5.0",
    "@vue/cli-plugin-router": "~4.5.0",
    "@vue/cli-plugin-vuex": "~4.5.0",
    "@vue/cli-service": "~4.5.0",
    "babel-eslint": "^10.1.0",
    "babel-plugin-component": "^1.1.1",
    "eslint": "^6.7.2",
    "eslint-plugin-vue": "^6.2.2",
    "vue-template-compiler": "^2.6.11"
},



我们可以看到vuex版本号为^3.4.0其实这个是根据一个叫semver版本的规范来定义的。X.Y.Z分别对应的是主版本.次版本.修订版本

在这里插入图片描述

npm install原理

我们平时打开项目直接npm install的时候其实是根据package.json的开发时依赖和生成环境依赖来安装依赖的

当我们使用npm install的时候,大概流程如下所示:
在这里插入图片描述
我们在第一次install的时候:

我们是没有lock.json文件的,此时我们要构建依赖关系,其实就是扁平化我们的依赖。因为很有可能出现比如我们webpack依赖一个叫X的包,而我们axios也依赖X的包,为了避免重复安装X的依赖所以可以采用扁平化的处理来优化。构建完依赖关系之后我们就通过registry仓库下载压缩包。并且按照完后我们会进行对压缩包进行缓存再将其压缩到node_modules文件中。并在此时生成一个叫package-lock.json的文件对后面的再次install做优化。这就是我们会经常看到除了package.json文件,还有一个package-lock.json文件

后续install的时候:
我们会检查是否存在package-lock.json的文件,并且检查依赖是否一致。例如package.json的版本号等等,如果不一致的话我们又得构建依赖关系。如果一致我们就可以直接找缓存了。但是如果没找到我们还是得从registry仓库重新安装依赖并且获取压缩包添加到新的缓存中去。并把压缩包压缩到node_modules中

当我们的依赖包可能出现问题的时候我们可以先清除缓存:npm cache clean再重新install

npm link

#!/user/bin/env node:告诉操作系统执行这个脚本的时候,调用/usr/bin下的node可执行文件(node解释器),也就是说写绝对路径也是可以的。扩展下:bin就是binarary二进制的缩写,里面一般放可执行文件

脚本用env启动的原因,是因为脚本解释器在linux中可能被安装于不同的目录,env可以在系统的PATH目录中查找。同时,env还规定一些系统环境量。 而如果直接将解释器路径写死在脚本里,可能在某些系统就会存在找不到解释器的兼容性问题。

npm link是让package.json里的bin连接到本地环境变量。

使用指令的步骤为:
index.js里:

#!/usr/bin/env node
console.log('test');

package.json里:

"bin": {
    "han": "index.js"//告诉可执行命令han的执行文件是index.js
},

最后通过npm link使package.json里的bin连接到本地环境变量。也就是把han作为了终端命令配置到了环境变量里,一旦执行han命令就会在环境变量找到index.js并执行

完事后执行一下:

在这里插入图片描述

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值