脚本执行必要条件
1.脚本执行需要设置执行权限
命令行中输入如下命令:
chmod u+x <脚本文件路径> //添加脚本执行权限及本用户权限
2.告诉系统用什么执行当前脚本
文件第一行写 #!/usr/bin/env + 模块名称
#!/usr/bin/env ts-node // 用ts-node 执行
#!/usr/bin/env node // 用node 执行
#!/usr/bin/env bash // 执行shell
3.执行方法
直接点击文件执行 或打开命令行工具 输入 ./脚本文件路径 执行
如果没告诉系统用什么执行当前脚本 那就需要 node ./脚本文件路径 执行了
1.shell 脚本 示例
创建test.sh 文件复制下方代码 直接设置权限 双击执行
#!/usr/bin/env bash
# 打开命令窗口 并 输出 开始执行 shell脚本
echo "开始执行 shell脚本"
# 要求你输入名字
read -p "请输入你的名字:" name
# 要求你输入名字
echo "输入的名字是:${name}"
# 打开网页跳转到百度
open "http://www.baidu.com"
2.node 脚本
node 脚本执行es6 解决方案
- 把js 文件 改成mjs 文件,告诉node 用es6模块执行文件
- 使用ts 在文件第一行加入 #!/usr/bin/env ts-node ,需要全局安装 ts-node模块,ts-node 会把ts编译成es5 执行
- 使用 babel-node 替换node 执行 同时需要配置安装相关依赖和配置 ,对于写一个简单的node 脚本来说太麻烦 不怎么用就不详细介绍有兴趣自行看官网文档
方案1适用: 单个文件编写的node 脚本
方案2适用: 适用ts 编写的node 脚本
方案3适用: 适用于大型项目
node文件热更新
安装 nodemon 模块
npm i add nodemon
使用
nodemon node ./文件执行路径
监听node 文件,文件修改立马就会重执行 文件
用于解决每次修改文件需要手动执行的问题
脚本参数/环境变量
node 脚本
脚本参数 process.argv
环境变量 process.env
shell 脚本
获取参数 $0 $1 // 以$开头
3.npm cli 开发
1.创建脚本node.ts 安装 commander + ts-node + shell
#!/usr/bin/env ts-node
import { Command } from "commander";
import shell from 'shelljs'
const program = new Command()
program
.name("my-command")
.version('v0.0.1', '-v, --version', `输出版本号`)
.option('-d, --debug', '调试模式')
.option('-p, --pizza-type [type]', '自定义输入命令')
.option('-n, --number <numbers...>', '输入多文字',)
//.option('-l, --letter [letters...]', '指定的字母')
.option('-na, --name <name>', '名称')
program.parse(process.argv);
console.log( program.opts())
2.在npm package.json 配置文件中 添加
设置名称 + 脚本路径
"bin": {
"my-test": "./你的脚本路径" //
},
在本地开发npm 模块,使用npm link命令,将npm 模块链接到对应的运行项目中去,方便地对模块进行调试和测试
npm link
命令行输入 my-test 会执行你的脚本文件
命令行输入 my-test -v 可以看见版本号
命令行输入 my-test -h 可以找到帮助
使用 commander 官方文档( cli开发 必备)
使用 shelljs 模块 赋予node 和终端交流的功能 官网文档
使用 shell.exec 直接输入在终端 执行的命令如 shell.exec(‘git --version’) 打印出git版本号
#!/usr/bin/env ts-node
import shell from 'shelljs'
if(shell.exec('git --version')){
console.log("当前环境有git")
shell.exit(1)
}else{
console.log("当前环境没有git")
}
inquirer模块 询问用户输入
inquirer.prompt([
{
type: 'list',
name: 'frame',
message: '请选择开发的脚手架',
choices: ['react'],
},
{
type: 'input',
name: 'name',
message: '请输入项目名称',
},
])
commander 模块 官方文档( cli开发 必备)
import { Command } from "commander";
program
.name("my-command")
.version('v0.0.1', '-v, --version', `输出版本号`)
.option('-d, --debug', '调试模式')
.option('-p, --pizza-type [type]', '自定义输入命令')
.option('-n, --number <numbers...>', '输入多个',)