初始版本
执行以下命令初始化 Node.js 项目。这将创建 package.json
文件,用于承载项目元数据和依赖项管理。
npm init
创建 lib/grep.js:
function grep(pattern, text) {
const lines = text.split('\n');
const regex = new RegExp(pattern);
const matchingLines = lines.filter(line => regex.test(line));
return matchingLines.map(line => stripLeft(line));
}
function stripLeft(s) {
// 使用 replace 方法来去除开头的空格和制表符
return s.replace(/^[ \t]+/, '');
}
module.exports = {
grep
};
RegExp
对象提供正则表达式功能,是模式匹配和文本处理的强大工具。
创建 bin/grepjs:
#!/usr/bin/env node
const fs = require('fs');
const { grep } = require('../lib/grep');
function main() {
// pattern 和 file name 参数
const pattern = process.argv[2];
const fileName = process.argv[3];
if (!pattern || !fileName) {
console.error('Usage: grepjs <pattern> <file>');
process.exit(1);
}
// 异步读取文件,通过回调获取其内容
fs.readFile(fileName, 'utf8', (err, data) => {
if (err) {
console.error(`Error reading file: ${err.message}`);
process.exit(1);
}
// 调用 grep 函数,打印结果
const result = grep(pattern, data);
console.log(result.join('\n'));
});
}
main();
为了保证文件有可执行权限,你可以在终端中执行如下命令:
chmod +x bin/grepjs
process.argv
用于解析命令行参数和选项。
执行 CLI 脚本:
# 在文件 lib/grep.js 中查找“line”
./bin/grepjs line lib/grep.js
得到如下结果:
const lines = text.split('\n');
const matchingLines = lines.filter(line => regex.test(line));
return matchingLines.map(line => stripLeft(line));
Loading...
> 此处输出代码运行结果