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

使用Node.js开发IBM Cloud Code Engine Job时导入SDK遇问题

无法导入IBM Cloud Code Engine SDK到Node.js项目

我正尝试创建一个使用Code Engine SDK的Node.js Job,用来按需触发其他Job。按照IBM文档操作时,没法成功导入Code Engine SDK。

我已经执行了以下命令安装两个IBM Cloud SDK:

npm install ibm-cloud-sdk-core
npm install @ibm-cloud/ibm-code-engine-sdk

安装成功,在node_modules/里能看到相关文件,也能正常从核心SDK导入IamAuthenticator模块:

import { IamAuthenticator } from 'ibm-cloud-sdk-core';

但尝试导入Code Engine SDK中的CodeEngineV2时遇到多种错误:

  • 按IBM文档给出的路径导入,提示找不到模块
  • 添加.js后缀后,提示需要在package.json中设置"type": "module"
  • 设置后又出现“require is not defined”的错误

附相关代码文件:

index.js

import { IamAuthenticator } from 'ibm-cloud-sdk-core';
import { CodeEngineV2 } from '@ibm-cloud/ibm-code-engine-sdk/dist/code-engine/v2';

async function main() {
  try {
    // Load secrets from Code Engine
    const iamAuthenticator = new IamAuthenticator({ apikey: process.env.CODE_ENGINE_API_KEY });
    console.log(`Batch job completed successfully`);
  } catch (error) {
    console.error('Error processing batch job:', error);
  }  
}

main();

package.json

{
  "name": "code-engine-test-repo",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "type": "module",
  "scripts": {
    "start": "node index.js",
    "pretty": "prettier --write \"./**/*.{js,jsx,json}\""
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "node-env-run": "^4.0.2"
  },
  "engines": {
    "node": ">=14.0.0"
  },
  "dependencies": {
    "@ibm-cloud/ibm-code-engine-sdk": "^3.1.0",
    "ibm-cloud-sdk-core": "^4.0.5"
  }
}

解决方案

问题出在导入路径和ES模块兼容性上,按以下步骤修复:

  1. 修正CodeEngineV2的导入路径
    不要直接导入dist目录下的文件,SDK本身提供了标准导出,直接从包根目录导入即可:
import { CodeEngineV2 } from '@ibm-cloud/ibm-code-engine-sdk';
  1. 解决"require is not defined"错误
    该错误是因为SDK内部混用了CommonJS和ES模块语法,而你的项目开启了ES模块模式("type": "module"),可以二选一处理:

    • 方案一:改用CommonJS语法
      删除package.json中的"type": "module",将index.js的导入语法改为require:

      const { IamAuthenticator } = require('ibm-cloud-sdk-core');
      const { CodeEngineV2 } = require('@ibm-cloud/ibm-code-engine-sdk');
      

      这种方式更适配IBM SDK的现有打包结构。

    • 方案二:保留ES模块模式
      安装esm包来兼容混合模块语法:

      npm install esm
      

      修改package.json的启动脚本:

      "scripts": {
        "start": "node -r esm index.js"
      }
      
  2. 完善SDK客户端初始化
    修复导入后,记得正确实例化CodeEngine客户端(当前代码仅创建了认证器,未初始化SDK):

// 以ES模块模式为例
import { IamAuthenticator } from 'ibm-cloud-sdk-core';
import { CodeEngineV2 } from '@ibm-cloud/ibm-code-engine-sdk';

async function main() {
  try {
    const authenticator = new IamAuthenticator({ apikey: process.env.CODE_ENGINE_API_KEY });
    // 根据你的部署区域调整serviceUrl
    const codeEngineService = new CodeEngineV2({
      authenticator,
      serviceUrl: 'https://api.us-south.codeengine.cloud.ibm.com/v2'
    });
    
    // 这里添加触发Job的逻辑,比如调用createJobRun方法
    // const jobRun = await codeEngineService.createJobRun({
    //   projectId: '你的项目ID',
    //   jobName: '目标Job名称'
    // });
    
    console.log(`Batch job completed successfully`);
  } catch (error) {
    console.error('Error processing batch job:', error);
  }  
}

main();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 23:58:30