在刷华为OD的笔试题时,需要使用node。处理输入输出,会用到readline
模块。
readline
模块提供了一个接口 可以在可读流中读取数据
js
const readline = require('readline')
const rl = readline.createInterface({
input: process.stdin,
})
rl.on('line', (input) => {
console.log(input)
if (input === 'exit') {
rl.close()
}
})
rl.on('close', () => {
console.log('guanbi')
})
使用异步迭代器的写法(华为面试题给的测试代码)
js
const readline = require('readline')
const rl = readline.createInterface({
input: process.stdin,
})
const iter = rl[Symbol.asyncIterator]()
const getlLine = async () => {
const { done, value } = await iter.next()
return value
}
void (async () => {
while ((line = await getlLine())) {
console.log(line)
if (line === 'exit') {
rl.close()
}
}
})()
rl.on('close', () => {
console.log('guanbi')
})
立即执行函数前有的void
关键字,其实加不加都会立即执行,但是还是有区别的。
void 表示不关心返回结果,只是想要触发异步操作,返回值始终是个undefined。
本地vscode 使用ts、 ts-node、nodemon、esmodule模块 调试 node代码
全局安装 ts-node ts
shell
pnpm add -g ts-node typescript nodemon
pnpm add -D @types/node typescript
设置package.json type
字段为module
初始化 tsconfig文件
shell
tsc --init
tsconfig.json 配置
json
{
"compilerOptions": {
"target": "ESNext" /* 编译出来的产物 */,
"module": "ESNext", /* 指定编译产物的模块格式 */
"strict": false,
"esModuleInterop": true, /* 修复了一些 CommonJS 和 ES6 模块之间的兼容性问题 */
},
"include": ["."],
"exclude": ["**/node_modules/**"],
"ts-node": {
"esm": true /* ts-node 支持 esm 只兼容node16版本 */
}
}
版本
shell
ts-node --version # v10.9.2
tsc --version # Version 5.4.5
node --version # v16.18.1
nodemon --version # 3.1.1
ts-node 代码中使用 import 时,只支持的node版本是16,使用高版本就报错了
使用 require() 时,20版本的node也能用