2024路在何方
某行业全球top1企业的前端主管
展开
-
14.兼容windows和macOS的spawn
14.兼容windows和macOS的spawnspawn在windows和macOS是有兼容问题的,那么我们就需要写一套具备兼容能力的spawn举例说明:在macOS中,执行spawn代码cp.spawn('node', ['-e', 'console.log(1)'], ...)在win32中,执行spawn代码就为c.spawn('cmd', ['/c', '-e', 'console.log(1)'], ...)function spawn(command, args, op原创 2021-06-24 21:10:05 · 1400 阅读 · 0 评论 -
13.举例说明将代码改成多进程执行
8.举例说明将代码改成多进程执行假设原先的代码如下:require(rootFile).call(null, Array.from(arguments)); // require加载并执行,这个后续会改成node多进程去实现那么如何将这个require改为多进程执行呢?思路:这是一段node代码,执行这段代码,类似于执行console.log(1)。而console.log(1)可以用node -e "console.log(1)"拉来执行。同理,将上面的require改成这种方式执原创 2021-06-24 20:38:37 · 253 阅读 · 0 评论 -
12.抽象Command
12.抽象Command我们在开发脚手架的时候,对于命令一般会封装成一个Command库,然后所有执行的命令都继承这个库1. Command库我们会建造一个Command类,这个类会接收到命令行的所有参数然后解析参数,对不符合要求的参数进行错误处理核心:通过promise链式调用,异步逐步执行node版本检查,参数初始化,程序初始化,程序执行等操作参数初始化主要是为了获取参数的最后一位——命令对象和除了最后一位的参数程序初始化init和程序执行exec函数,在Command类都会报出一个原创 2021-06-23 23:55:46 · 250 阅读 · 0 评论 -
11. node多进程之同步方法——execSync、execFileSync、spawnSync
11. node多进程之同步方法——execSync、execFileSync、spawnSyncexecSync、execFileSync同步方法直接返回内容,内容是Buffer类型spawnSync返回的是一个对象,里面有stdout,output等等,这几个属性内容是buffer类型,还有status,pid等等同步方法的错误用try…catch(err){…}来捕获const cp = require('child_process')// 同步方法直接返回内容,内容是Buffer类型原创 2021-06-23 00:32:52 · 7938 阅读 · 0 评论 -
10.node多进程之exec/execFile/spawn/fork之间的区别
10.node多进程之exec/execFile/spawn/fork之间的区别1.如何取选择使用exec/execFile和spawn?spawn是流式的,所以适合耗时任务,比如执行npm install,打印install的过程exec/execFile比较适合开销小的任务,更关注结果,比如ls等2. fork一般用于哪些场景?一般用于比较耗时的场景,并且用node去实现的,比如下载文件fork可以实现多线程下载:将文件分成多块,然后每个进程下载一部分,最后拼起来3. requir原创 2021-06-23 00:30:10 · 1105 阅读 · 0 评论 -
9.node多进程之fork
9.node多进程之fork1. fork使用fork使用node来执行命令参数:模块的路径,相当于用node来执行该模块fork底层也是spawn,fork会返回一个子进程对象,通过这个子进程对象,可以实现主进程和子进程之间的通信const cp = require('child_process');const path = require('path');// fork使用node来执行命令// 参数:模块的路径,相当于用node来执行该模块cp.fork(path.resolv原创 2021-06-23 00:26:27 · 1159 阅读 · 0 评论 -
8.node多进程之spawn
8.node多进程之spawn1.spawn用法spawn返回的是子进程,不具备回调功能,但是子进程可以处理结果spawn是逐步输出结果的,如果某行出错了,那么该行错误被监听到,然后会继续往下执行,不会中断const cp = require('child_process');const path = require('path');// spawn返回的是子进程,不具备回调功能,但是子进程可以处理结果// spawn是逐步输出结果的,如果某行出错了,那么该行错误被监听到,然后会继续往下原创 2021-06-23 00:18:14 · 2176 阅读 · 0 评论 -
7.node多进程之exec与execFile
7.node多进程之exec与execFile1. 以下是exec的使用可以执行一个命令,也可以执行一个文件,但是不能单独传参// exec执行一个命令(可以是自己脚手架的命令),但是不能执行一个文件// exec(命令字符串,options,回调函数)cp.exec('ls -al|grep core.js', { cwd: path.resolve(__dirname, '../') // 在指定目录下执行}, (err, stdout, stderr) => {原创 2021-06-23 00:16:08 · 1180 阅读 · 0 评论 -
6.当前实现的脚手架架构及存在的问题
3.当前实现的脚手架架构及存在的问题痛点分析当前脚手架架构图如下:------------------------------------------------------------------------| 脚手架 || ------------- ------------- ------------- ------------- |原创 2021-06-15 15:22:08 · 196 阅读 · 0 评论 -
5.commander在脚手架项目中的应用
5. commander在脚手架项目中的应用1. 初始化const commander = require('commander');const program = new commander.Command();const pkg = require('./package.json');registerCommand();function registerCommand(){ program .name(Object.Keys(pkg.bin)[0]) .usa原创 2021-06-15 14:37:55 · 266 阅读 · 0 评论 -
4.Node项目如何支持ES Module,即:CommonJs中如何支持ES Module
4.Node项目如何支持ES Module,即:CommonJs中如何支持ES Module1. 模块化的发展历程(由先到后):CMD/AMD/require.jsCommonJS用require()加载模块,用module.exports/exports.x来输出模块ES Module用import加载模块,用export default/export来输出2. CommonJS中使用ES Module防范方案一:利用webpack打包编译成commonJs假设当原创 2021-06-15 01:28:53 · 1125 阅读 · 0 评论 -
3.commander库的使用
3.commander库的使用1. 获取program实例的两种方式从commander中解构出一个program单例const commander = require('commander');const { program } = commander;手动实例化一个commander实例为programconst commander = require('commander');const program = new commander.Command();2. 参数解析原创 2021-06-15 01:26:36 · 570 阅读 · 0 评论 -
2.搭建项目通用步骤
2.搭建项目通用步骤在入口的bin文件中协商#!/usr/bin/env node安装import-local进行判断是否使用本地的当前包#!/usr/bin/env nodeconst importLocal = require("import-local");const log = require("@imooc-cli-dev/logs");if (importLocal(__filename)) { log.notice("cli", "当前使用本地 imooc-cli-原创 2021-06-15 01:24:58 · 185 阅读 · 0 评论 -
1. 用lerna搭建项目
1. 用lerna搭建项目步骤:npm init 初始化npm项目npm i -D lerna 安装lernalerna init用lerna初始化项目解构根据之前设计好的脚手架架构图,对项目进行拆包,同时对lerna.json进行配置修改,主要该packages为拆包的内容"packages": [ "core/*", "commands/*", "models/*", "utils/*"],创建core、commands、models、utils文件原创 2021-06-15 01:22:37 · 504 阅读 · 0 评论