npm的使用以及npx
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 ci
和 npm 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 自带的模块。
想在命令行下直接调用一个包,有以下几种方法。
全局安装 npm 包,然后就可以直接调用了。
>npm i webpack -g // 安装 >webapck // 调用
在项目内部安装,使用路径调用
>npm i webpack -D // 安装 >mode_modules/.bin/webpack 调用
有了 npx 之后,就可以直接使用 npx webpack
来调用 webpack 了
命令行 搜索命令顺序 只搜索 系统环境变量 Path 配置
npx 搜索顺序 node_modules/.bin 目录–》 系统环境变量 Path 配置 --》 远程库
npx 在本地搜索不到相关的包的时候会自动搜索远程库,然后下载安装它到一个临时目录使用之后,再删除。
常常使用的 npx 暂时这么多。
npm的使用以及npx相关推荐
- npm、nvm、npx、nrm的区别
npm.nvm.npx.nrm的区别 npm:npm是node自带的包管理工具,负责对依赖包进行下载,同时也可以发布自己的包 nvm:nvm是node的版本管理工具,可以使用nvm动态切换node版本 ...
- npm run dev 和 npx webpack-dev-server
其实这两个命令是一样的,npm run dev找的是目录下的webpack.dev.conf.js文件 而npx webpack-dev-server找的是目录下的webpack.conf.js,而如 ...
- 【混淆系列】三问:npx、npm、cnpm、pnpm确定搞明白了?
大家好,我是猫小白,本文继续输出前端混淆知识点系列第三问.致力于夯实基础.消灭模糊知识点. 往期[混淆知识]传送门: 一问:module.exports.exports.export都是导出,有何区别 ...
- 了解和理解npm、npx、nvm、nrm
提示:了解和理解npm.npx.nvm.nrm npm.npx.nvm.nrm 前言 一.npm 是什么?npx 呢? 1.npm 2.npx 二.什么是 nvm ? 1.是什么 2.使用场景 3.常 ...
- npm和npx的区别
npx是一个工具,它是npm v5.2.0引入的一条命令(npx),是npm的一个包执行器,只要为了提高从npm注册表使用软件包的体验 . npm使得它非常容易地安装和管理托管在注册表上的依赖项, n ...
- npx的使用与npm
What is NPM Node Package Manager https://www.npmjs.com/ This is the source code for the three-word t ...
- npm和package.json那些不为常人所知的小秘密
此文已由作者黄锴授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 强大的命令功能 如果你没使用过script,那你可算是从来没手动编辑过package.json.script作 ...
- 在使用npm install时遇到的问题 npm ERR! code ERESOLVE
在使用npm install时遇到的问题 npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tree npm ...
- npm yarn pnpm 发展历程
从上往下按发布时间排序 npm v1 / npm v2 不足:依赖包嵌套的问题,导致 node_modules 体积越来越大:没有cahce,没有离线功能 npm v3 peerDependencie ...
最新文章
- NB-IoT与eMTC差异全解析
- Python代码加密混淆
- Oracle中创建、修改、删除序列
- 如何使用 Python 实现微信消息防撤回
- 《Algorithms》Comparable 实现希尔排序
- ZBrush中如何实现智能对称
- Windows 7的上帝模式
- TigerGraph入门
- 音频D类功放LC滤波器设计(一)
- android鲁班压缩
- Power bi 3.2 堆积柱形图
- 一篇文章了解光学器件的各种参数含义
- SublimeText3 搭建 C++ Python
- 《庄子·杂篇·列御寇第三十二》
- 手机怎样转换php格式,手机视频格式转换方法适合所有手机视频格式转换|如何转换手机视频格式...
- 《Java程序设计》公选课学习指南
- git 提交两次commit到同一分支,被糅合为一次Marge Request的解决方法:cherry-pick
- 511遇见易语言调用百度OCR文字在线本地识别及游戏画面时时识别
- 1053: 正弦函数
- Kubernetes 高可用集群部署
热门文章
- python中def func(*args, **kwargs)
- scratch-www主页图标替换
- 注意力机制:基于Yolov5/Yolov7的Triplet注意力模块,即插即用,效果优于cbam、se,涨点明显
- Android编程:底部弹出输入框
- 618有什么运动装备好、好用的运动装备清单
- echarts 环形图内部加个圈
- PC微信机器人之实战分析微信发送xml名片消息call
- 使用Vivado出现过的问题 Vivado编辑器用Vscode重启后又变为默认 Vivado启动timout问题
- Idea部署Maven构建的web项目(Jspxcms)
- 抖音扫码获取cookie带倒计时刷新(PHP+ajax)