javascript - 为什么我突然收到 ELIFECYCLE errno 1?

标签 javascript node.js babeljs yarnpkg discord.js

我刚刚将我的开发环境转移到了 Fedora。我已经正确安装了 Node 和 NPM,但我的运行脚本无法运行。它立即退出,错误号为 1,没有额外的输出。它在我的 Mac 和 Windows 桌面上完美运行。

我的 npm-error.log:

0 info it worked if it ends with ok
1 verbose cli [ '/usr/bin/node', '/usr/bin/npm', 'run', 'dev' ]
2 info using npm@5.6.0
3 info using node@v8.9.4
4 verbose run-script [ 'predev', 'dev', 'postdev' ]
5 info lifecycle biblebot@5.0.0~predev: biblebot@5.0.0
6 info lifecycle biblebot@5.0.0~dev: biblebot@5.0.0
7 verbose lifecycle biblebot@5.0.0~dev: unsafe-perm in lifecycle true
8 verbose lifecycle biblebot@5.0.0~dev: PATH: /usr/lib/node_modules/npm/node_modules.bundled/npm-lifecycle/node-gyp-bin:/home/vypr/Code/BibleBot/node_modules/.bin:/usr/lib64/qt-3.3/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/home/vypr/bin:/home/vypr/bin:/home/vypr/bin:/home/vypr/bin
9 verbose lifecycle biblebot@5.0.0~dev: CWD: /home/vypr/Code/BibleBot
10 silly lifecycle biblebot@5.0.0~dev: Args: [ '-c', 'babel src -d build && node build/start.js' ]
11 silly lifecycle biblebot@5.0.0~dev: Returned: code: 1  signal: null
12 info lifecycle biblebot@5.0.0~dev: Failed to exec dev script
13 verbose stack Error: biblebot@5.0.0 dev: `babel src -d build && node build/start.js`
13 verbose stack Exit status 1
13 verbose stack     at EventEmitter.<anonymous> (/usr/lib/node_modules/npm/node_modules.bundled/npm-lifecycle/index.js:285:16)
13 verbose stack     at emitTwo (events.js:126:13)
13 verbose stack     at EventEmitter.emit (events.js:214:7)
13 verbose stack     at ChildProcess.<anonymous> (/usr/lib/node_modules/npm/node_modules.bundled/npm-lifecycle/lib/spawn.js:55:14)
13 verbose stack     at emitTwo (events.js:126:13)
13 verbose stack     at ChildProcess.emit (events.js:214:7)
13 verbose stack     at maybeClose (internal/child_process.js:925:16)
13 verbose stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:209:5)
14 verbose pkgid biblebot@5.0.0
15 verbose cwd /home/vypr/Code/BibleBot
16 verbose Linux 4.13.9-300.fc27.x86_64
17 verbose argv "/usr/bin/node" "/usr/bin/npm" "run" "dev"
18 verbose node v8.9.4
19 verbose npm  v5.6.0
20 error code ELIFECYCLE
21 error errno 1
22 error biblebot@5.0.0 dev: `babel src -d build && node build/start.js`
22 error Exit status 1
23 error Failed at the biblebot@5.0.0 dev script.
23 error This is probably not a problem with npm. There is likely additional logging output above.
24 verbose exit [ 1, true ]

我注意到问题不在于 Babel 而在于脚本,所以我使用 node(它是一个 Discord 机器人)运行它,它启动但立即停止,没有任何错误。

我也尝试了我在这里找到的解决方案,但没有任何帮助。我也尝试过 yarn,但以不同的格式收到相同的错误:

Trace: 
  Error: Command failed.
  Exit code: 1
  Command: sh
  Arguments: -c babel src -d build && node build/start.js
  Directory: /home/vypr/Code/BibleBot
  Output:

      at ProcessTermError.MessageError (/usr/lib/node_modules/yarn/lib/cli.js:186:110)
      at new ProcessTermError (/usr/lib/node_modules/yarn/lib/cli.js:226:113)
      at ChildProcess.<anonymous> (/usr/lib/node_modules/yarn/lib/cli.js:30281:17)
      at emitTwo (events.js:126:13)
      at ChildProcess.emit (events.js:214:7)
      at maybeClose (internal/child_process.js:925:16)
      at Process.ChildProcess._handle.onexit (internal/child_process.js:209:5)

我的运行脚本(我使用了 dev):

"scripts": {
    "build": "babel src -d build",
    "dev": "babel src -d build && node build/start.js",
    "start": "node build/start.js",
    "refresh": "git pull && babel src -d build && node build/start.js",
    "snyk-protect": "snyk protect",
    "prepare": "npm run snyk-protect",
    "test": "snyk test"
  },

我还看到其他答案说这可能与端口已被使用有关。因此,我研究了 discord.js 使用的端口(80 和 443),并尝试查看 Python 的 SimpleHTTPServer 使用这些端口是否失败。它运行完美(尽管我必须以 sudo 运行,但即使是 sudo npm run dev 也会给我同样的问题)。

我在 Babel 转译之前的代码:

import central from "./central";
import * as config from "./data/config";

import * as Discord from "discord.js";
const bot = new Discord.Client();

import CommandHandler from "./handlers/commands";
import VerseHandler from "./handlers/verses";

const commandHandler = new CommandHandler();
const verseHandler = new VerseHandler();

import settings from "./handlers/commands/settings";

bot.on("ready", () => {
    central.logMessage("info", "global", "global", "connected");
    bot.user.setPresence({
        status: "online",
        afk: false,
        game: {
            "name": "BibleBot v" + process.env.npm_package_version,
            "url": "https://biblebot.vypr.space"
        }
    });
});

bot.on("debug", (debug) => {
    if (config.debug) {
        central.logMessage("debug", "global", "global", debug);
    }
});

bot.on("reconnecting", () => {
    central.logMessage("info", "global", "global", "attempting to reconnect");
});

bot.on("disconnect", () => {
    central.logMessage("info", "global", "global", "disconnected");
});

bot.on("warning", (warn) => {
    central.logMessage("warn", "global", "global", warn);
});

bot.on("error", (e) => {
    central.logMessage("err", "global", "global", e);
});

bot.on("message", (raw) => {
    // taking the raw message object and making it more usable
    let rawSender = raw.author;
    let sender = rawSender.username + "#" + rawSender.discriminator;
    let channel = raw.channel;
    let message = raw.content;
    let source;

    if (config.debug) {
        // TODO: Replace this with user IDs.
        switch (sender) {
            case "vipr#4035":
                break;
            default:
                if (config.versionAdders.indexOf(sender) != -1) {
                    break;
                } else {
                    return;
                }
        }
    }

    settings.languages.getLanguage(rawSender, (language) => {
        // channel.guild is used here because
        // of the possibility that DMs are being used
        // otherwise, i'd use guild.name
        if ((typeof channel.guild != "undefined") &&
            (typeof channel.name != "undefined")) {
            source = channel.guild.name + "#" + channel.name;
        } else {
            source = "unknown (direct messages?)";
        }

        if (sender == config.botname) return;
        if (channel.guild.name.includes("Discord Bot")) {
            if (raw.author.id != config.owner) {
                return;
            }
        }

        if (message.charAt(0) == "+") {
            const command = message.substr(1).split(" ")[0];

            let args = message.split(" ");
            const returnValue = args.shift(); // remove the first item

            if (returnValue == undefined) {
                args = null;
            }

            try {
                commandHandler.processCommand(command, args, language, rawSender, (res) => {
                    let originalCommand;

                    if (!res.announcement) {
                        channel.send(res.message);

                        Object.keys(language.commands).forEach((originalCommandName) => {
                            if (language.commands[originalCommandName] == command) {
                                originalCommand = originalCommandName;
                            } else if (command == "eval") {
                                originalCommand = "eval";
                            }
                        });
                    } else {
                        Object.keys(language.commands).forEach((originalCommandName) => {
                            if (language.commands[originalCommandName] == command) {
                                originalCommand = originalCommandName;
                            }
                        });

                        bot.guilds.forEach((value) => {
                            if (value.name == "Discord Bots" ||
                                value.name == "Discord Bot List") return;

                            let sent = false;
                            const ch = value.channels.findAll("type", "text");
                            const preferred = ["misc", "bots", "meta", "hangout", "fellowship", "lounge", "congregation", "general",
                                "taffer", "family_text", "staff"
                            ];

                            for (let i = 0; i < preferred.length; i++) {
                                if (!sent) {
                                    let receiver = ch.find(val => val.name === preferred[i]);

                                    if (receiver) {
                                        receiver.send(res.message.replace(
                                            "+" + language.commands.announce + " ", ""
                                        )).catch(() => {
                                            // do nothing
                                        });

                                        sent = true;
                                    }
                                }
                            }
                        });

                        channel.send("Done.");
                    }

                    let cleanArgs = args.toString().replaceAll(",", " ");
                    if (originalCommand == "puppet" || originalCommand == "eval" || originalCommand == "announce") cleanArgs = "";

                    central.logMessage(res.level, sender, source, "+" + originalCommand + " " + cleanArgs);
                });
            } catch (e) {
                central.logMessage("err", sender, source, e.message);

                channel.send(e.message);
                console.error(e.stack);
                return;
            }
        } else {
            try {
                verseHandler.processRawMessage(raw, rawSender, language, (result) => {
                    if (!result.invalid) {
                        if (result.twoMessages) {
                            channel.send(result.firstMessage);
                            channel.send(result.secondMessage);
                        } else {
                            channel.send(result.message);
                        }

                        central.logMessage(result.level, sender, source, result.reference);
                    }
                });
            } catch (e) {
                central.logMessage("err", sender, source, e.message);
                return;
            }
        }
    });
});


central.logMessage(
    "info", "global", "global", "BibleBot v" + process.env.npm_package_version +
    " by Elliott Pardee (vypr)");
bot.login(config.token);

Babel 转译后的代码:

"use strict";

var _central = require("./central");

var _central2 = _interopRequireDefault(_central);

var _config = require("./data/config");

var config = _interopRequireWildcard(_config);

var _discord = require("discord.js");

var Discord = _interopRequireWildcard(_discord);

var _commands = require("./handlers/commands");

var _commands2 = _interopRequireDefault(_commands);

var _verses = require("./handlers/verses");

var _verses2 = _interopRequireDefault(_verses);

var _settings = require("./handlers/commands/settings");

var _settings2 = _interopRequireDefault(_settings);

function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

var bot = new Discord.Client();

var commandHandler = new _commands2.default();
var verseHandler = new _verses2.default();

bot.on("ready", function () {
    _central2.default.logMessage("info", "global", "global", "connected");
    bot.user.setPresence({
        status: "online",
        afk: false,
        game: {
            "name": "BibleBot v" + process.env.npm_package_version,
            "url": "https://biblebot.vypr.space"
        }
    });
});

bot.on("debug", function (debug) {
    if (config.debug) {
        _central2.default.logMessage("debug", "global", "global", debug);
    }
});

bot.on("reconnecting", function () {
    _central2.default.logMessage("info", "global", "global", "attempting to reconnect");
});

bot.on("disconnect", function () {
    _central2.default.logMessage("info", "global", "global", "disconnected");
});

bot.on("warning", function (warn) {
    _central2.default.logMessage("warn", "global", "global", warn);
});

bot.on("error", function (e) {
    _central2.default.logMessage("err", "global", "global", e);
});

bot.on("message", function (raw) {
    // taking the raw message object and making it more usable
    var rawSender = raw.author;
    var sender = rawSender.username + "#" + rawSender.discriminator;
    var channel = raw.channel;
    var message = raw.content;
    var source = void 0;

    if (config.debug) {
        // TODO: Replace this with user IDs.
        switch (sender) {
            case "vipr#4035":
                break;
            default:
                if (config.versionAdders.indexOf(sender) != -1) {
                    break;
                } else {
                    return;
                }
        }
    }

    _settings2.default.languages.getLanguage(rawSender, function (language) {
        // channel.guild is used here because
        // of the possibility that DMs are being used
        // otherwise, i'd use guild.name
        if (typeof channel.guild != "undefined" && typeof channel.name != "undefined") {
            source = channel.guild.name + "#" + channel.name;
        } else {
            source = "unknown (direct messages?)";
        }

        if (sender == config.botname) return;
        if (channel.guild.name.includes("Discord Bot")) {
            if (raw.author.id != config.owner) {
                return;
            }
        }

        if (message.charAt(0) == "+") {
            var command = message.substr(1).split(" ")[0];

            var args = message.split(" ");
            var returnValue = args.shift(); // remove the first item

            if (returnValue == undefined) {
                args = null;
            }

            try {
                commandHandler.processCommand(command, args, language, rawSender, function (res) {
                    var originalCommand = void 0;

                    if (!res.announcement) {
                        channel.send(res.message);

                        Object.keys(language.commands).forEach(function (originalCommandName) {
                            if (language.commands[originalCommandName] == command) {
                                originalCommand = originalCommandName;
                            } else if (command == "eval") {
                                originalCommand = "eval";
                            }
                        });
                    } else {
                        Object.keys(language.commands).forEach(function (originalCommandName) {
                            if (language.commands[originalCommandName] == command) {
                                originalCommand = originalCommandName;
                            }
                        });

                        bot.guilds.forEach(function (value) {
                            if (value.name == "Discord Bots" || value.name == "Discord Bot List") return;

                            var sent = false;
                            var ch = value.channels.findAll("type", "text");
                            var preferred = ["misc", "bots", "meta", "hangout", "fellowship", "lounge", "congregation", "general", "taffer", "family_text", "staff"];

                            var _loop = function _loop(i) {
                                if (!sent) {
                                    var receiver = ch.find(function (val) {
                                        return val.name === preferred[i];
                                    });

                                    if (receiver) {
                                        receiver.send(res.message.replace("+" + language.commands.announce + " ", "")).catch(function () {
                                            // do nothing
                                        });

                                        sent = true;
                                    }
                                }
                            };

                            for (var i = 0; i < preferred.length; i++) {
                                _loop(i);
                            }
                        });

                        channel.send("Done.");
                    }

                    var cleanArgs = args.toString().replaceAll(",", " ");
                    if (originalCommand == "puppet" || originalCommand == "eval" || originalCommand == "announce") cleanArgs = "";

                    _central2.default.logMessage(res.level, sender, source, "+" + originalCommand + " " + cleanArgs);
                });
            } catch (e) {
                _central2.default.logMessage("err", sender, source, e.message);

                channel.send(e.message);
                console.error(e.stack);
                return;
            }
        } else {
            try {
                verseHandler.processRawMessage(raw, rawSender, language, function (result) {
                    if (!result.invalid) {
                        if (result.twoMessages) {
                            channel.send(result.firstMessage);
                            channel.send(result.secondMessage);
                        } else {
                            channel.send(result.message);
                        }

                        _central2.default.logMessage(result.level, sender, source, result.reference);
                    }
                });
            } catch (e) {
                _central2.default.logMessage("err", sender, source, e.message);
                return;
            }
        }
    });
});

_central2.default.logMessage("info", "global", "global", "BibleBot v" + process.env.npm_package_version + " by Elliott Pardee (vypr)");
bot.login(config.token);

最佳答案

我最终找到了问题所在。

在我原始代码的第 2 行中,我的意思是从“./config”导入配置。进行更改可以完美修复它。

对于其他阅读过并遇到类似问题的人,请确保您正确导入。

关于javascript - 为什么我突然收到 ELIFECYCLE errno 1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49190013/

相关文章:

javascript - 使用 vue.js 按提交后将用户重定向到不同页面

JavaScript - 从目录中选择一个随机页面

javascript - .babelrc 中指定的 Babel 6 预设不起作用

javascript - 要求 ('babel/register' )不起作用

JavaScript 不读取多选中的文本

javascript - 如何使用 Ajax 和 jQuery 传递两个不同选择标签的值以进行处理?

node.js - 放大初始化错误 - ✖ 根堆栈创建失败初始化失败 TypeError : Cannot redefine property: default

node.js - Angular 7 到 8 升级 : Cannot GET/home, 构建没有错误

node.js - 未收到 Socket.io 事件(nginx 反向代理,服务器到客户端)

node.js - Babel 7 与 Express