错误相对路径全局包nodejs

error relative path global package nodejs

我创建了一个有多种选择的包,根据我的选择,我 运行 一个 bash 脚本 .sh 和来自节点的 execFile 它在​​本地与路径 "./utils/myScript .sh

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

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

我在启动脚本时遇到另一个小问题 我有我的日志,但我没有看到脚本的 return 显示,就好像我直接用 ./myScript.sh[ 启动了这个脚本一样=11=]

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("3[32;5mDATABASE DEV RUN - host: 127.0.0.1 - port: 33063[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"));
            }
        });
}

而不是做一个相对的 import/require - 你可以使用 __dirname 常量并使用“join”以获得更好的兼容性。 __dirname 生成当前模块的完整路径目录。

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

execFile(join(__dirname, 'utils', 'myScrypt.sh'), opts, (error, stdout, // ...