npx使用教程

今晚在学习Vue-Cli时, 由于突发奇想想试试最新的@4.x.x版本, 但是本地全局安装的脚手架版本是@2.x.x的, 因为不想污染全局于是就想到用npx命令, 一路上踩坑不断, 为了以后能够更好的使用npx并区分其跟npm的指令, 就有了本篇笔记

npm 是从5.2版开始, 增加(自带)了 npx 命令。 如果发现没安装请手动安装:

npm i -g npx

npm与npx的概念

  1. NPM(Node Package Manager) 是Node.js提供的一个包管理器, 可以使用 NPM 来安装 node.js 包
  2. NPX(Node Package Excuted) 可以理解为用于临时安装并执行某个包的一个工具

总结的来说:

  1. npm专注于安装包
  2. npx专注于执行包, 并且是较特殊的执行

npx的使用场景(对比npm的一些优势)

从几个使用场景出发, 希望能够有对应您当前的场景, 这样就能直接套用了


使用场景1: 想用项目中已经安装好的某个包, 但是不能直接执行(因为没有全局安装, 涉及环境变量的问题)

对于这个场景, 有些笨方法:

  1. 到项目的根目录下执行: node-modules/.bin/包对应的脚本
  2. 配置npm script: 在package.json的scripts中将方法1添加进脚本, 然后就能在需要的时候执行"npm run 自定义指令"以快速执行啦, 本质上只是对方法1的改进

更优雅的方法, 就是使用npx命令啦:

npx <包对应的命令>

# 以less编译为例:
npx lessc -v # 查看当前项目下less编译器的版本

使用场景2: 已全局安装某个包, 项目又已安装了不同版本的某个包, 想用项目的那个版本

以我今晚的踩坑作为第二个使用场景, 我本地已经全局安装了Vue脚手架的@2.x.x版本, 但是我想用并已经在本地项目文件目录中安装了最新的@4.x.x版本, 即:

# 已经执行过
npm i -g vue-cli@2
vue -V # vue@2.9.6
# 已经执行过 cd my-project
npm i -D @vue/cli@4
vue -V # vue-cli@4.5.13

这时, 如果使用vue -V会发现使用的是全局的版本, 因为npm默认会执行全局中的包。如果想使用项目已经安装的那个版本就直接执行如下命令:

npx <包对应的命令>

# 以vue-cli为例:
npx vue create my-project

使用场景3: 不想全局或在项目中安装某个包, 只想临时使用

对于这种场景, npx就是必要的选择。npx会将要用的下载到一个临时目录, 使用完毕后自动删除, 还是以Vue-Cli为例: 这次的我突发奇想想看看React脚手架的项目文件结构, 由于我还没学, 所以本地和全局都没有安装(只是临时想用脚手架创建一个React项目)

npx create-react-app my-react-project #react脚手架将会在项目搭建完后自动被删除掉

使用场景4: 临时使用特定版本的包(本地没有安装)

如题所示, 这里以我突发奇想想使用Vue脚手架的@3.x.x版本, 但是我全局已经安装了@2.x.x版本

cd my-vue-project   # 进入我的vue项目
npx @vue/cli@3 create big-project # 利用vue-cli的3.x版本创建一个名为big-project的项目

关于npx的一些参数

  1. 安装并使用特定版本: npx 包@版本号 包对应的命令
  2. --no-install 强制使用本地包, 本地包如果没安装就会报错: npx --no-install vue create my-project
  3. --ignore-existing 强制安装使用远程模块: npx --ignore-existing vue create my-project
  4. -p 对于一次性安装多个包,使用参数-p: npx -p @vue/cli -p less 切记: 安装多个包一定要使用 -p
  5. -c 在一次性安装并使用多个包的场景中: 在低版本下执行npx -p vue-cli -p less lessc -v & vue -V命令, 有可能只有第一个命令项能正常执行, 即:只打印出less编辑器的版本。npx的参数-c就是为了告诉npx执行指定的所有命令的范围: npx -p vue-cli -p less -c "lessc -v & vue -V", 这样就能保证绝对的安全了。 注: &代表两个命令都执行, |代表前面执行成功后面命令就不执行

这一小节中最常用、重要的是第5点, 根据此总结: 不管安装的包、命令的个数个数是多少(哪怕只安装1个包), 严格遵守npx -p 包1 -p 包2 -p 包n -c "命令1 & 命令2 & 命令n" 一定没错


写在最后

啰里啰嗦只为了更加详细的记录, 全文结束!

npx的使用方法、场景的更多相关文章

  1. 阿里云场景化阿里云企业数字化转型售前方法PSA

    阿里云场景化阿里云企业数字化转型售前方法PSA 目录 01 课程收获 理解企业数字化转型的概念.内涵.本质 了解企业数字化转型的要点.目标和切入点 掌握数字化转型项目售前阶段实践方法 场景化方案 阿里 ...

  2. Unity 中场景切换

    Unity游戏开发中,单个Scene解决所有问题似乎不可能,那么多个Scene之间的切换是必然存在.如果仅仅是切换,似乎什么都好说,但是在场景比较大的时候不想让玩家等待加载或者说场景与场景之间想通过一 ...

  3. Cocos2d-x-lua游戏两个场景互相切换MainScene01切换到MainScene02

    /* 场景一lua代码 */ require "MainScene02" local dic_size = CCDirector:sharedDirector():getWinSi ...

  4. iOS 多线程NSThread理解与场景示例

    NSThread是相对GCD和NSOperationQuene而言,比较轻量级的一种多线程处理方式. 但同时,它的弊端就是需要自己管理线程的生命周期,以及线程同步:而另外两种不需要自己管理. 常见方法 ...

  5. 【机器学习实战】第7章 集成方法 ensemble method

    第7章 集成方法 ensemble method 集成方法: ensemble method(元算法: meta algorithm) 概述 概念:是对其他算法进行组合的一种形式. 通俗来说: 当做重 ...

  6. Linux环境下Swap配置方法

    Linux环境下Swap配置方法 场景: 今天下午安装一个CentOS6.5操作系统,忘记配置swap分区.看看如何安装系统之后,增加和删除swap分区.方法如下:1.内存占用情况[root@josh ...

  7. npx命令介绍

    什么是npx 第一次看到npx命令是在 babel 的文档里 Note: If you do not have a package.json, create one before installing ...

  8. Python 在子类中调用父类方法详解(单继承、多层继承、多重继承)

    Python 在子类中调用父类方法详解(单继承.多层继承.多重继承)   by:授客 QQ:1033553122   测试环境: win7 64位 Python版本:Python 3.3.5 代码实践 ...

  9. npx 命令介绍

    这个是在 npmv5.2.0引入的一条命令(查看),引入这个命令的目的是为了提升开发者使用包内提供的命令行工具的体验. 为什么引入这个命令 举个例子,我们开发中要运行 parcel 命令来打包:par ...

随机推荐

  1. Redis分布式锁 (图解-秒懂-史上最全)

    文章很长,而且持续更新,建议收藏起来,慢慢读! 高并发 发烧友社群:疯狂创客圈(总入口) 奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : 极致经典 + 社群大片好评 < Java 高并发 三 ...

  2. 【题解】codeforces 8c Looking for Order 状压dp

    题目描述 Lena喜欢秩序井然的生活.一天,她要去上大学了.突然,她发现整个房间乱糟糟的--她的手提包里的物品都散落在了地上.她想把所有的物品都放回她的手提包.但是,这里有一点问题:她一次最多只能拿两 ...

  3. 『动善时』JMeter基础 — 49、使用JMeter自身代理录制APP测试脚本

    目录 1.测试计划内包含的元件 2.HTTP代理服务器的设置内容 3.设置手机的代理服务器 4.录制脚本 5.查看录制的脚本 6.HTTP代理服务器的排除模式 7.保存脚本 8.注意坑点 录制脚本只不 ...

  4. Spring Boot下的一种导出Excel文件的代码框架

    1.前言 ​ 在Spring Boot项目中,将数据导出成Excel格式文件是常见的功能.与Excel文件导入类似,此处也用代码框架式的方式实现Excel文件导出,使得代码具有可重用性,并保持导出数据 ...

  5. 微信订阅号中获取openid以及个人信息

    采用的方式是利用另一个服务号获取用户信息. 其中有一个问题就是不关注这个服务号获取不了用户头像等信息.

  6. sql循环说明

    while循环:主要是判断,不能使用表中的ID,临时表是ID自增的,通过自增ID可以查出表ID(语法简单,需要配合其他代码操作表ID)游标循环:可以使用表中的ID ,进行修改等操作(语法难一点,核心代 ...

  7. excel自动记录项目完成进度,是否逾期,逾期/提前完成天数,计算天数可以把now()改为today()

    =IF(D38="",NOW()-C38,F38) 注:如果没有启用迭代计算,可以点击"文件"-"选项"-"公式"-&q ...

  8. jquery动画(控制动画隐藏、显示时间轴)

    <!DOCTYPE html><html> <head>    <meta http-equiv="Content-type" conte ...

  9. excel用函数去掉单元格内容中的括号,并只保留单元格里面的内容

    1.substitute(需要执行替换操作的单元格,需要替换的字符,替换后的字符,有多个需要替换的字符可以指定替换的第几个) 例如:aab--substitute("aab",&q ...

  10. 8.QSharedPointer

    QSharedPointer 是一个共享指针, 同时是引用计数型的智能指针 ,也就是说,QSharedPointer可以被自由地拷贝和赋值,在任意的地方共享它. QSharedPointer内部会对拥 ...