Nodejs编写复制文件及文件夹命令

时间:2021-06-12 12:33:51

github地址

use

npm i fuzhi -g

复制文件

fuzhi a.js b.js

复制文件夹

fuzhi dirA dirB

Wiki

创建一个node命令的两个关键点

1.在package.json中加上bin属性

{
  "name": "fuzhi",
  "version": "0.0.4",
  "author": "leinov",
  "bin": {
    "fuzhi": "./bin/fuzhi"
  },
  "dependencies": {
    "chalk": "^2.4.1"
  },
  "keywords": [
    "node",
    "copy",
    "fuzhi"
  ],
}

bin属性值是一个到本地文件名的映射。属性名是执行的命令名称,属性值是执行文件路径

2. 添加执行命令的文件头

./bin/fuzhi

#!/usr/bin/env node
...

#!/usr/bin/env node是帮助脚本找到node的脚本解释器,这句也是必须的,通过 npm get prefix获取本地node路径

在测试本地node包时都要使用到npm link将本地node包映射到全局node文件夹下,我们来看下在没有bin属性的node项目下执行npm link会输出什么

npm link 

/Users/leinov/.nvm/versions/node/v8.11.3/lib/node_modules/test -> /Users/leinov/project/test

显示告诉我们将/Users/leinov/project/test的项目的件放到了全局node下
这样在项目中就可以直接调使用

const test = require("test");

如果package.json下有bin属性会是怎么样的

/Users/leinov/.nvm/versions/node/v8.11.3/bin/fuzhi -> /Users/leinov/.nvm/versions/node/v8.11.3/lib/node_modules/fuzhi/bin/fuzhi
/Users/leinov/.nvm/versions/node/v8.11.3/lib/node_modules/fuzhi -> /Users/leinov/github/project/fuzhi

多了一行将命令文件映射到node的执行命令文件夹下,node bin目录下会多一个fuzhi命令,全局可执行

fuzhi ...

开发命令功能

这里主要用到node的三个api

  • fs
  • process
  • path
    以及chalk包来控制输出样式

完整代码

github地址