1

我创建了一个包含多个选项的包,根据选择,我从节点运行带有 execFile 的 bash 脚本 .sh,它在本地使用路径“./utils/myScript.sh”可以正常工作

但是当我使用 npm pack 创建包并全局安装时,它在 utils 目录中找不到脚本文件。另一方面,如果我把路径 /usr/local/lib/node_modules/choicescript/utils/myScript.sh 它工作

如何告诉它使用相对路径而不是绝对路径

当脚本启动时我有另一个小问题我有我的日志,但我没有看到显示的脚本返回,就好像我直接使用 ./myScript.sh 启动了这个脚本一样

const program = require("commander");
const chalk = require("chalk");
const inquirer = require("inquirer");
const { execFile } = require("child_process");

let opts = {
    shell: "/bin/bash",
};

function devFunc() {
    execFile("./utils/myScrypt.sh", opts, (error, stdout, stderr) => {
        log(stdout);
        log(stderr);
        if (error !== null) {
            log(`exec error: ${error}`);
        }
    });

    log(chalk.green.bold("\033[32;5mDATABASE DEV RUN - host: 127.0.0.1 - port: 3306\033[0m - ") + chalk.blue.bold(`CTRL+C pour quitter`));
}

const { dev, preprod, prod } = program.opts();
if (dev) {
    devFunc();
} else if (preprod) {
    preprodFunc();
} else if (prod) {
    prodFunc();
} else {
    inquirer
        .prompt([
            {
                type: "rawlist",
                name: "Database_gcp",
                message: "Database choice",
                choices: ["dev", "preprod", "prod", "exit"],
            },
        ])
        .then((gcp) => {
            if (gcp.Database_gcp === "dev") {
                devFunc();
            }
            if (gcp.Database_gcp === "preprod") {
                preprodFunc();
            }
            if (gcp.Database_gcp === "prod") {
                prodFunc();
            }
            if (gcp.Database_gcp === "exit") {
                log(chalk.blue("EXIT"));
            }
        });
}
4

1 回答 1

1

而不是进行相对导入/要求 - 您可以使用__dirname常量并使用“join”以获得更好的兼容性。__dirname产生当前模块的完整路径目录。

//...
const { join } = require('path');
//...

execFile(join(__dirname, 'utils', 'myScrypt.sh'), opts, (error, stdout, // ...
于 2021-11-13T10:53:16.640 回答