脚手架的开发总结

栏目: Node.js · 发布时间: 5年前

内容简介:最近在做一个脚手架的项目,涉及到了一些关于nodeJS端的操作。网上找了很多资源,以及一些设想,都在此处记录下来,作为一种总结。命令行指令操作时,需要使用到以下几个包:首先,创建一个简单的CLI脚本文件run,如下:

最近在做一个脚手架的项目,涉及到了一些关于nodeJS端的操作。网上找了很多资源,以及一些设想,都在此处记录下来,作为一种总结。 github博客

正文

脚手架指令的构建

命令行指令操作时,需要使用到以下几个包:

@oclif/command
@oclif/config
@oclif/plugin-help
@oclif/dev-cli
复制代码

首先,创建一个简单的CLI脚本文件run,如下:

#!/usr/bin/env node

require('@oclif/command').run()
    .then(require('@oclif/command/flush'))
    .catch(require('@oclif/errors/handle'));
复制代码

然后在package.json中添加配置,如下:

{
	"bin": {      //命令指向的脚本地址
		"clitest": "./bin/run"
	}
}
复制代码

之后,建立一个link,如下:

npm link       //执行之后,会在命令行中出现clitest
复制代码

然后,逐个建立脚手架命令。例如create命令,如下:

const Command = require('@oclif/command');

class CreateCli extends Command.Command {
    constructor() {
        super(...arguments);
    }

    async run() {
        try {
            console.log('create');
        } catch(err) {
            console.log(err);
        }
    }
}

CreateCli.description = 'create test';
exports.default = CreateCli;
复制代码

最后,在package.json中指明command地址,如下:

"oclif": {
	"commands": "./commands",
	"bin": "clitest",
	"plugins": [
		"@oclif/plugin-help"
	]
},
"files": [
	"/bin",
	"/commands"
],
复制代码

脚手架命令部分构建基本完毕了。如下是执行成功的图片:

脚手架的开发总结

nodeJS路径问题

编写脚手架的过程中,路径问题经常容易出错。下面总结了一些nodeJS中常常会使用到的路径变量:

__dirname: 指当前执行文件所在目录的完整目录名
__filename: 指当前执行文件的带有完整绝对路径的文件名
process.cwd(): 指当前执行node命令时候的文件夹目录名
./: 指文件所在目录

os.homedir(): 指系统的home目录
复制代码

下面是一些实验的数据结果,如下:

const path = require('path');
const os = require('os');

console.log(path.resolve(__dirname));
console.log(path.resolve(__filename));
console.log(process.cwd());
console.log(os.homedir());
console.log(path.basename(__dirname));
console.log(path.basename(__filename));
复制代码

执行结果:

脚手架的开发总结

监听文件

此处使用到的npm是watch。

npm install watch
复制代码

一般使用函数watch.watchTree(root)。在脚手架中,我们往往需要监听一些文件的改动情况,如下:

watch.watchTree(src, {
	filter: (filePath) => {
		// 过滤不需要被监听的文件和文件夹
		// ...
	}
}, (f, curr, prev) => {
	if (typeof f == "object" && prev === null && curr === null) {
      // Finished walking the tree
	} else if (prev === null) {
      // f is a new file
	} else if (curr.nlink === 0) {
      // f was removed
	} else {
      // f was changed
	}
});
复制代码

之后,我们需要对于新增文件、删除文件和文件改变中作出操作。

node端的登录和上传

此处使用到的npm是request。

npm install request
复制代码

在登录请求和上传文件的过程中,我们需要使用到formData来进行上传,但是nodeJS并无FormData的对象,所以,这里就要涉及到使用request来进行上传了。

request.post({
    url,         //请求接口
    form: {
        userName: username,
        password: password
    }
}, (err, response: Response, body) => {
    // ...
});
复制代码

同理,上传文件时,也可以通过form表单的形式上传上去。但是,一般文件上传的接口都需要登录,所以需要在带上cookie。

const j = request.jar();
j.setCookie(cookie);

const req = request.post({
	url,
	jar: j
}, (err, res: Responese, body) => {
	// ...
});

const form = req.form();
form.append(fileName, file);
复制代码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

网站入侵与脚本攻防修炼

网站入侵与脚本攻防修炼

逍遥 / 2008-9 / 59.00元

《网站入侵与脚本攻防修炼》从“攻”、“防”两个角度,通过现实中的入侵实例,并结合原理性的分析,图文并茂地展现网站入侵与防御的全过程。全书共分8章,系统地介绍网站入侵的全部过程,以及相应的防御措施和方法。其中包括网站入侵的常见手法、流行网站脚本入侵手法揭密与防范、远程攻击入侵网站与防范、网站源代码安全分析与测试等。《网站入侵与脚本攻防修炼》尤其对网站脚本漏洞原理进行细致的分析,帮助网站管理员、安全人......一起来看看 《网站入侵与脚本攻防修炼》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具