» Node.js创建命令行程序grep » 2. 开发 » 2.2 初始版本

初始版本

执行以下命令初始化 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));