npx;npm;npm link;npm多源镜像;

摘录&心得

问与答

1、出现依赖问题时,删除node_modules然后重新npm install就可以了,原理是什么?会出问题么?
答:原理是会重新按照一套靠谱的规则安装版本,详见工作机制。出问题未知?

npm

npm(node package manager),是包管理工具,不是语言

工作机制

  • 依赖的安装按照扁平化原则,放在node_modules的根目录下
  • 由于存在根据npm版本决定包的情况,团队中的npm版本要保持一致。

    缓存机制

  • npm下载依赖时,会先缓存到本地,再解压到node_modules中

  • 安装依赖时,会根据lock文件中存储的 integrity、version、name 信息生成一个唯一的 key,对应缓存。

    npm link

  • 如何验证公共组件的正确性?

    • 在组件库开发中,设计 examples 目录或者一个 playground,启动一个开发服务。
    • 使用npm link在本地调试未发布的外部包
  • npm link可以将模块链接到对应的业务项目中运行

    • 在包里执行npm link,将其放入全局node_modules中。
    • 在项目里执行npm link npm-packagename,读取去全局node_modules中的包
    • 记得npm unlink

      npx

  • 传统npm全局安装依赖的方案很僵硬,总觉得电脑硬盘被占满了。

  • npx可以直接执行 node_modules/.bin 文件夹下的文件。
  • 执行模块时会优先安装依赖,在安装执行后便删除此依赖,如:

    1. npx create-react-app cra-project

    企业级部署私服原理

    npm多源镜像

  • 所谓源,其实是一个查询服务

  • 通过npm config set可以设置安装源

    • 需要安装多个安装源的项目,可以通过脚本切换
      1. require(' child_process').exec('npm config get registry', function(error, stdout, stderr) {
      2. if (!stdout.toString().match(/registry\.x\.com/)) {
      3. exec('npm config set @xscope:registry https://xxx.com/npm/')
      4. }
      5. })
  • npm下载第三方包的速度很慢

    • 部署镜像后:安全、稳定
  • 主要有 3 种工具来搭建 npm 私服:nexus、verdaccio 以及 cnpm
    • 具体原理不是很明白,似乎可以合并npm库和私有库,可以用来微调node_modules包中代码:
    • image.png
    • image.png