代码之家  ›  专栏  ›  技术社区  ›  MeltingDog

如何在Node.js中使用2个不同的命令行提示从1个文件运行2个不同函数?

  •  0
  • MeltingDog  · 技术社区  · 1 年前

    我的项目中有一个.js文件,它导入了一个NPM包,并有2个函数使用该包:

    //replacePaths.js
    import {replaceInFile} from 'replace-in-file';
    async function replace() {
        const options = {
            files: 'src/**/*.jsx',
            from: 'dev/svgs/icons-main.svg',
            to: 'staging/media/svgs/icons-main.svg',
        };
    
        try {
            const results = await replaceInFile(options);
        } catch (error) {
            console.error('Error occurred:', error);
        }
    }
    
    async function revert() {
        const options = {
            files: 'src/**/*.jsx',
            from: 'staging/media/svgs/icons-main.svg',
            to: 'dev/svgs/icons-main.svg',
        };
    
        try {
            const results = await replaceInFile(options);
        } catch (error) {
            console.error('Error occurred:', error);
        }
    }
    module.exports = {
        replace,
        revert
    };
    

    我希望能够从命令行运行这些函数。我在谷歌上搜索过,为了做到这一点,我似乎只是在我的 package.json 文件:

    "scripts": {
        ...
        "replace": "node replacePaths.js replace",
        "revert" : "node replacePaths.js revert",
        ...
    }
    

    我在命令行中这样做了第一个: npm run replace ,但我弄错了 ReferenceError: module is not defined in ES module scope .

    通过谷歌搜索,我改变了 exports 部分内容:

    export default replace;
    export default revert;
    

    并再次尝试。我没有得到任何错误,只是得到了行 node replacePaths.js replace 打印在控制台中。

    我可以通过删除导出部分来运行这些函数,只需 replace() revert() 在JS文件上,但如果我想在同一个文件上有两个函数,这对我没有帮助。

    有人能给我指出正确的方向吗?

    3 回复  |  直到 1 年前
        1
  •  1
  •   Jaromanda X    1 年前

    这是最简单的答案-运行命令行上命名的函数

    import {replaceInFile} from 'replace-in-file';
    async function replace() {
        // snip
    }
    
    async function revert() {
        // snip
    }
    // add this to actually run a function
    await ({ replace, revert })[process.argv.at(-1)]?.();
    
        2
  •  1
  •   Wyck    1 年前

    要根据命令行参数运行不同的命令,您的顶级代码可以这样构造:

    const [,,command] = process.argv;
    
    try {
      if (command === 'replace') {
          await replace();
      } else if (command === 'revert') {
          await revert();
      } else {
          console.error('Unknown command. Use "replace" or "revert".');
      }
    } catch (e) {
      console.error(e);
    }
    

    运行它的示例:

    node replacePaths.js replace
    node replacePaths.js revert
    
        3
  •  0
  •   Shivam Devidas Chapule    1 年前
    // file: app.js
    const functionOne = () => {
        console.log("Function One Executed");
    };
    
    const functionTwo = () => {
        console.log("Function Two Executed");
    };
    
    const args = process.argv.slice(2);
    
    if (args[0] === 'functionOne') {
        functionOne();
    } else if (args[0] === 'functionTwo') {
        functionTwo();
    }
    
    推荐文章