npm 命令

npm 的使用

初始化

npm init 交互式初始化需要回答一系列问题。npm init -y 使用默认值,直接初始化。

安装依赖

npm支持一下几种依赖:

依赖类型 安装命令 说明
dependencies npm i [-P] [package-name] 不提供-P同时没有其他参数的时候,默认也是这个 运行时依赖例如 vue
devDependencies npm i -D [package-name] 开发时依赖 例如 webpack eslint
peerDependencies 手动添加 同等依赖,需要宿主提供的依赖,例如开发webpack插件的时候需要将webpack设置为同等依赖。发布的插件中不需要打包webpack,使用插件的时候npm会检测用户是否已经安装了webpack。
optionalDependencies npm i -O [package-name] 可选依赖,有些依赖存在则调用并执行不存在则执行其它逻辑不影响正常使用的,就可以放在这里,可选依赖和运行时依赖互斥不要同时填写。运行时依赖会被覆盖。
bundleDependencies npm i -B [package-name] 打包依赖,需要打包到最终产物中的依赖。

npm 依赖版本管理

  • ~ 会匹配最近的小版本依赖包,比如~1.2.3会匹配所有1.2.x版本,但是不包括1.3.0
  • ^ 会匹配最新的大版本依赖包,比如^1.2.3会匹配所有1.x.x的包,包括1.3.0,但是不包括2.0.0
  • * 安装最新版本的依赖包

  默认安装的时候使用^,可以使用npm config set save-prefix="~"命令修改默认值。也可以使用npm config set save-exact true命令保证npm每次仅安装精确版本号,或者在安装依赖的时候使用 npm i -E [package-name]命令可以直接安装精确的版本号。

查看npm包的最新版本

npm view grunt version

npm应用命令行中的参数

{"script":{"test":"git checkout %npm_config_branch%"}
}
npm run test --branch=dev

npm 命令中引用package.json 中的数据

{"name": "xxxx","script":{"test":"git checkout %npm_package_name%"}
}

npm script

并发执行

两个命令一起执行

npm run aaaaa & npm run bbbb

顺序执行

顺序执行,第一个成功再执行第二个

npm run aaaa && npm run bbbb

pre和post两个钩子

npm 脚本都有有pre和post两个钩子

{"scripts": {"prebuild": "echo 1","build": "echo 2","postbuild": "echo 3"},
}

执行 npm run build的时候,相当于执行npm run prebuild && npm run build && npm run postbuild

prepublish,postpublish
preinstall,postinstall
preuninstall,postuninstall
preversion,postversion
pretest,posttest
prestop,poststop
prestart,poststart
prerestart,postrestart

prepare, prepublish, prepublishOnly, prepack, postpack, dependencies

pnpm与 npm run的不同之处
默认情况下, pnpm 不会任意执行用户定义的 hook,pre 和 post (例如 prestart)。 这种从npm继承过来的习惯,会导致脚本执行是隐式的,而不是显式的,从而混淆了执行流程。 它还会导致意外执行 pnpm serve 和 pnpm preserve。
如果出于某种原因,需要 npm 的前置、后置钩子脚本,可使用enable-pre-post-scripts 选项。

npm ci

npm ci
aliases: clean-install, ic, install-clean, isntall-clean

npm ci命令触发的相关钩子以及执行顺序执行顺序

  • preinstall
  • install
  • postinstall
  • prepublish
  • preprepare
  • prepare
  • postprepare

npm i 和 npm ci 触发的钩子是一样的

npm cinpm i作用类似,npm ci 是给自动化流程使用的,
两者的差别在于:
执行npm ci的时候:

  • 项目必须包含package-lock.json 或者 npm-shrinkwrap.json
  • 如果 package-lock.json中的依赖的版本和package.json中的版本不匹配,npm ci 将会退出并报错而不是更新package-lock.json文件。
  • npm ci 只能一次性安装整个项目的依赖不能用来安装单个依赖。
  • npm ci开始安装之前如果已经存在node_modules,将会自动移除node_modules然后在开始安装。
  • 永远不会修改package.json或者package-locks文件,保持安装基本一致

pnpm 目前不支持 pnpm ci

npm pack

  • prepack
  • prepare
  • postpack

npm publish

  • prepublishOnly
  • prepack
  • prepare
  • postpack
  • publish
  • postpublish

prepare will not run during --dry-run

npm rebuild

  • preinstall
  • install
  • postinstall
  • prepare

prepare is only run if the current directory is a symlink (e.g. with linked packages)

npm restart

如果存在restart脚本则执行对应脚本,如果不存在则执行npm stop && npm start,如果有钩子也会调用对应的钩子。

  • prerestart
  • restart
  • postrestart

npm run

  • pre<user-defined>
  • <user-defined>
  • post<user-defined>

npm start

  • prestart
  • start
  • poststart

如果在项目根目录存在server.js ,package.json中没有start脚本将默认启动node server.js,对应的钩子仍然会执行。

npm stop

  • prestop
  • stop
  • poststop

npm test

  • pretest
  • test
  • posttest

npm version

  • preversion
  • version
  • postversion

npm uninstall 没有实现相关的钩子

npm 提供一个npm_lifecycle_event变量,可以访问到当前使用的命令。

console.log(process.env.npm_lifecycle_event);

关于 npx

  npm5.2 开始 加入了 npx 命令,它是 node 自带的模块。

想在命令行下直接调用一个包,有以下几种方法。

  1. 全局安装 npm 包,然后就可以直接调用了。

    >npm i webpack -g // 安装
    >webapck // 调用
    
  2. 在项目内部安装,使用路径调用

    >npm i webpack -D  // 安装
    >mode_modules/.bin/webpack 调用
    

有了 npx 之后,就可以直接使用 npx webpack来调用 webpack 了

命令行 搜索命令顺序 只搜索 系统环境变量 Path 配置

npx 搜索顺序 node_modules/.bin 目录–》 系统环境变量 Path 配置 --》 远程库

npx 在本地搜索不到相关的包的时候会自动搜索远程库,然后下载安装它到一个临时目录使用之后,再删除。

常常使用的 npx 暂时这么多。

npm的使用以及npx相关推荐

  1. npm、nvm、npx、nrm的区别

    npm.nvm.npx.nrm的区别 npm:npm是node自带的包管理工具,负责对依赖包进行下载,同时也可以发布自己的包 nvm:nvm是node的版本管理工具,可以使用nvm动态切换node版本 ...

  2. npm run dev 和 npx webpack-dev-server

    其实这两个命令是一样的,npm run dev找的是目录下的webpack.dev.conf.js文件 而npx webpack-dev-server找的是目录下的webpack.conf.js,而如 ...

  3. 【混淆系列】三问:npx、npm、cnpm、pnpm确定搞明白了?

    大家好,我是猫小白,本文继续输出前端混淆知识点系列第三问.致力于夯实基础.消灭模糊知识点. 往期[混淆知识]传送门: 一问:module.exports.exports.export都是导出,有何区别 ...

  4. 了解和理解npm、npx、nvm、nrm

    提示:了解和理解npm.npx.nvm.nrm npm.npx.nvm.nrm 前言 一.npm 是什么?npx 呢? 1.npm 2.npx 二.什么是 nvm ? 1.是什么 2.使用场景 3.常 ...

  5. npm和npx的区别

    npx是一个工具,它是npm v5.2.0引入的一条命令(npx),是npm的一个包执行器,只要为了提高从npm注册表使用软件包的体验 . npm使得它非常容易地安装和管理托管在注册表上的依赖项, n ...

  6. npx的使用与npm

    What is NPM Node Package Manager https://www.npmjs.com/ This is the source code for the three-word t ...

  7. npm和package.json那些不为常人所知的小秘密

    此文已由作者黄锴授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 强大的命令功能 如果你没使用过script,那你可算是从来没手动编辑过package.json.script作 ...

  8. 在使用npm install时遇到的问题 npm ERR! code ERESOLVE

    在使用npm install时遇到的问题 npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tree npm ...

  9. npm yarn pnpm 发展历程

    从上往下按发布时间排序 npm v1 / npm v2 不足:依赖包嵌套的问题,导致 node_modules 体积越来越大:没有cahce,没有离线功能 npm v3 peerDependencie ...

最新文章

  1. NB-IoT与eMTC差异全解析
  2. Python代码加密混淆
  3. Oracle中创建、修改、删除序列
  4. 如何使用 Python 实现微信消息防撤回
  5. 《Algorithms》Comparable 实现希尔排序
  6. ZBrush中如何实现智能对称
  7. Windows 7的上帝模式
  8. TigerGraph入门
  9. 音频D类功放LC滤波器设计(一)
  10. android鲁班压缩
  11. Power bi 3.2 堆积柱形图
  12. 一篇文章了解光学器件的各种参数含义
  13. SublimeText3 搭建 C++ Python
  14. 《庄子·杂篇·列御寇第三十二》
  15. 手机怎样转换php格式,手机视频格式转换方法适合所有手机视频格式转换|如何转换手机视频格式...
  16. 《Java程序设计》公选课学习指南
  17. git 提交两次commit到同一分支,被糅合为一次Marge Request的解决方法:cherry-pick
  18. 511遇见易语言调用百度OCR文字在线本地识别及游戏画面时时识别
  19. 1053: 正弦函数
  20. Kubernetes 高可用集群部署

热门文章

  1. python中def func(*args, **kwargs)
  2. scratch-www主页图标替换
  3. 注意力机制:基于Yolov5/Yolov7的Triplet注意力模块,即插即用,效果优于cbam、se,涨点明显
  4. Android编程:底部弹出输入框
  5. 618有什么运动装备好、好用的运动装备清单
  6. echarts 环形图内部加个圈
  7. PC微信机器人之实战分析微信发送xml名片消息call
  8. 使用Vivado出现过的问题 Vivado编辑器用Vscode重启后又变为默认 Vivado启动timout问题
  9. Idea部署Maven构建的web项目(Jspxcms)
  10. 抖音扫码获取cookie带倒计时刷新(PHP+ajax)