什么是npx


本文作者: jsweibo

本文链接: https://jsweibo.github.io/2019/05/24/%E4%BB%80%E4%B9%88%E6%98%AFnpx/

摘要

本文主要讲述了:

  1. 什么是 npx
  2. 查看版本
  3. 查看帮助
  4. 调用可执行文件
  5. 传递参数
  6. 临时安装调用
  7. 调用特定版本的可执行文件
  8. -p 参数
  9. -c 参数

正文

注意:npx已被废弃,请使用npm exec

什么是 npx

npx 是 npm 中依赖包的可执行文件的执行器。

查看版本

1
2
3
#!/usr/bin/env bash

npx --version

1
2
3
#!/usr/bin/env bash

npx -v

查看帮助

1
2
3
#!/usr/bin/env bash

npx --help

1
2
3
#!/usr/bin/env bash

npx -h

调用可执行文件

npx可以调用位于$PATH./node_modules/.bin内的可执行文件。

示例:位于$PATH

1
npx notepad

示例:位于./node_modules/.bin

1
2
3
#!/usr/bin/env bash

npx webpack

此外,npx也可以调用包的可执行文件(即bin字段对应的文件)

示例:

foo/package.json

1
2
3
4
5
6
7
8
9
10
11
12
13
{
"name": "foo",
"version": "1.0.0",
"description": "",
"main": "index.js",
"bin": "bin.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}

foo/index.js

1
console.log('index.js');

foo/bin.js

1
2
3
4
#!/usr/bin/env node

// 注意:JavaScript文件的首行必须为`#!/usr/bin/env node`,表明该脚本文件由`node`进行解释和执行
console.log('bin.js');

运行:

1
2
3
4
5
6
7
#!/usr/bin/env bash

# 调用包的可执行文件
npx .

# 调用`package.json`中的`main`字段所对应的脚本
node .

npm link执行成功之后,shell 脚本文件(用于调用包的可执行文件)已经位于$PATH,可以通过npx调用 shell 脚本文件来执行包的可执行文件

1
2
3
4
5
6
7
8
#!/usr/bin/env bash

# 在`npm root -g`下创建指向`demo`的符号链接
# 在`npm bin -g`下创建shell脚本文件(用于调用包的可执行文件)
npm link

# 通过`npx`调用shell脚本文件来执行包的可执行文件
npx foo

npm link执行成功之后,shell 脚本文件(用于调用包的可执行文件)已经位于$PATH,也可以直接调用 shell 脚本文件来执行包的可执行文件

1
2
3
4
5
6
7
8
#!/usr/bin/env bash

# 在`npm root -g`下创建指向`demo`的符号链接
# 在`npm bin -g`下创建shell脚本文件(用于调用包的可执行文件)
npm link

# 直接调用shell脚本文件来执行包的可执行文件
foo

临时安装调用

当可执行文件不存在于$PATH中,也不存在于./node_modules/.bin时,npx 会临时安装依赖包,接着执行依赖包的可执行文件,最后删除依赖包。

示例:临时安装最新版本的@vue/cli并以此创建名为my-vue的项目

1
2
3
#!/usr/bin/env bash

npx @vue/cli create my-vue

示例:临时安装最新版本的@angular/cli并以此创建名为my-angular的项目

1
2
3
#!/usr/bin/env bash

npx @angular/cli new my-angular

示例:临时安装最新版本的create-react-app并以此创建名为my-react的项目

1
2
3
#!/usr/bin/env bash

npx create-react-app my-react

调用特定版本的可执行文件

npx 可以在调用可执行文件的同时指定可执行文件的版本。

示例:

1
2
3
#!/usr/bin/env bash

npx node@8 --version

-p 参数

--package-p参数用于声明需要临时安装的包。

示例:临时安装node@8并输出node@8的版本号

1
2
3
#!/usr/bin/env bash

npx -p node@8 node --version

示例:临时安装最新版本的webpack-cliwebpack,调用webpack命令,index.js为参数

1
2
3
#!/usr/bin/env bash

npx -p webpack-cli -p webpack webpack index.js

示例:临时安装最新版本的@angular/cli,调用ng命令,newmy-angular为参数

1
2
3
#!/usr/bin/env bash

npx -p @angular/cli ng new my-angular

-c 参数

-c参数用于在类npm run-script环境内执行命令字符串

示例:

1
2
3
4
5
#!/usr/bin/env bash

# 在Ubuntu下测试通过
# 在Windows下测试失败
npx -c 'echo $npm_package_name'

类似

1
console.log(process.env.npm_package_name);

参考资料

本文作者: jsweibo

本文链接: https://jsweibo.github.io/2019/05/24/%E4%BB%80%E4%B9%88%E6%98%AFnpx/


本文对你有帮助?请支持我


支付宝
微信