You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行gulp ngrok-serve时出现kill EPERM错误,请求技术支持

解决Gulp启动Ngrok时的EPERM错误问题

错误现象

运行gulp ngrok-serve --debug时出现权限错误:

>>gulp ngrok-serve --debug  
[16:34:54] Found additional Yo Teams plugin: yoteams-deploy
[16:34:54] Using gulpfile ~\OneDrive - HEGELMAT\Desktop\Projects\LEARN-MSTEAMS-MEETINGS\gulpfile.js
[16:34:54] Starting 'ngrok-serve'...
[16:34:54] Starting 'start-ngrok'...
[16:34:54] [NGROK] starting ngrok...
[16:34:54] 'start-ngrok' errored after 90 ms
[16:34:54] Error: kill EPERM
    at ChildProcess.kill (node:internal/child_process:511:26)
    at setAuthtoken (C:\Users\hegel\OneDrive - XXXXX\Desktop\Projects\LEARN-MSTEAMS-MEETINGS\node_modules\ngrok\src\process.js:149:11)
    at process.processTicksAndRejections (node:internal/process/task_queues:105:5)
    at async Object.connect (C:\Users\hegel\OneDrive - XXXXX\Desktop\Projects\LEARN-MSTEAMS-MEETINGS\node_modules\ngrok\index.js:18:5)
[16:34:54] Finished 'ngrok-serve' after 99 ms

手动启动正常

直接执行Ngrok命令可以正常运行:

>> ngrok http 3007 --url xxxxx.ngrok.app 

排查思路与解决步骤

  • 检查环境变量配置:Gulp任务依赖PORT、NGROK_AUTH等环境变量,确认process.env.PORT值为3007(与手动启动一致),可暂时注释authtoken配置,测试是否为认证令牌导致的权限问题。
  • 清理残留Ngrok进程:EPERM错误常因残留进程占用资源导致,打开任务管理器结束所有ngrok.exe进程后,重新运行Gulp命令。
  • 调整Gulp任务配置:修改ngrokTasks.js中的Ngrok配置,与手动启动参数对齐,比如手动指定端口、暂时注释非必要配置:
    const conf = {
        addr: 3007, // 替换环境变量,手动指定端口
        // subdomain: process.env.NGROK_SUBDOMAIN,
        // region: process.env.NGROK_REGION,
        // authtoken: process.env.NGROK_AUTH
    };
    
  • 修复Ngrok包权限或重新安装:以管理员身份运行命令行执行Gulp命令;删除node_modules和package-lock.json后重新执行npm install;尝试升级/降级ngrok包版本。
  • 检查Ngrok可执行文件权限:确认当前用户对node_modules/ngrok/bin下的Ngrok可执行文件有读写和执行权限。

附:原始Ngrok任务代码

"use strict";
// Copyright (c) Wictor Wilén. All rights reserved.
// Licensed under the MIT license.
// SPDX-License-Identifier: MIT
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ngrokTasks = void 0;
const fancy_log_1 = __importDefault(require("fancy-log"));
const ngrok_1 = __importDefault(require("ngrok"));
const _1 = require(".");
const plugin_error_1 = __importDefault(require("plugin-error"));
const ngrokTasks = (gulp, config) => {
    gulp.task("start-ngrok", (cb) => {
        (0, fancy_log_1.default)("[NGROK] starting ngrok...");
        const conf = {
            subdomain: process.env.NGROK_SUBDOMAIN,
            region: process.env.NGROK_REGION,
            addr: process.env.PORT,
            authtoken: process.env.NGROK_AUTH
        };
        ngrok_1.default.connect(conf).then((url) => {
            (0, fancy_log_1.default)("[NGROK] Url: " + url);
            if (!conf.authtoken) {
                (0, fancy_log_1.default)("[NGROK] You have been assigned a random ngrok URL that will only be available for this session. You will need to re-upload the Teams manifest next time you run this command.");
            }
            let hostName = url.replace("http://", "");
            hostName = hostName.replace("https://", "");
            (0, fancy_log_1.default)("[NGROK] PUBLIC_HOSTNAME set to: " + hostName);
            process.env.PUBLIC_HOSTNAME = hostName;
            (0, fancy_log_1.default)("[NGROK] Inspect Url: " + ngrok_1.default.getUrl());
            cb();
        }).catch((err) => {
            cb(new plugin_error_1.default("yoteams-build.core", err));
        });
    });
    gulp.task("ngrok-serve", (0, _1.dependencies)(gulp, "ngrok-serve", "start-ngrok", "manifest", "serve"));
};
exports.ngrokTasks = ngrokTasks;

内容的提问来源于stack exchange,提问作者hegel mat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 17:04:52