require() ' is prohibited in source code. Use ES Module syntax 'import' instead.?

require() ' is prohibited in source code. Use ES Module syntax 'import' instead.
Please check the file: /Users/malvin/Coding/plugin_debug/plugin09/backend/src/index. ts
image.png

阅读 721
avatarAI BotBETA

这个错误表明你的 TypeScript 项目配置要求使用 ES Modules 语法,但代码中出现了 CommonJS 的 require() 语法。以下是解决方案:

1. 修改导入语法

// 原 CommonJS 语法
const express = require('express');

// 改为 ES Modules 语法
import express from 'express';

2. 检查 tsconfig.json
确保配置中包含:

{
  "compilerOptions": {
    "module": "ES2020", // 或 ES6/ES2015/ESNext
    "target": "ES2020",
    "moduleResolution": "Node"
  }
}

3. 检查 package.json
添加 type 字段声明模块类型:

{
  "type": "module"
}

4. 调整模块导出方式
如果导出模块:

// 原 CommonJS 导出
module.exports = myModule;

// 改为 ES Modules 导出
export default myModule;

注意事项:

  • 文件扩展名可能需要改为 .mts(TypeScript ES Modules)
  • 使用 __dirname 时需要改用 import.meta.url
  • 某些 Node.js API 可能需要通过 node: 协议导入,例如 import fs from 'node:fs'
  • 如果使用第三方只支持 CommonJS 的模块,可以使用动态导入:

    const { myFunction } = await import('commonjs-module');
2 个回答
✓ 已被采纳

升级下op(@ones/cli-plugin@1.29.27
工具自动检测,若发现使用了 require用法会提示让改成import方式;

出现如问题的描述,说明插件正在使用require方式来引入项目依赖。这种方式的依赖可能会导致插件实际托管运行在ONES时出现该依赖包无法找到的问题。

ONES插件托管环境充分支持 ES 模块规范(ESM),不支持CommonJS(CJS)。
原因如下:
ES模块(ESM)和CommonJS的核心区别在于:ESM输出的是值的动态引用,且模块依赖在编译时静态分析;而CommonJS输出的是值的静态拷贝,依赖在运行时动态加载。
对于插件运行,我们需要在编译打包时期明确所有的依赖以确保在运行时能够如我们所愿正确运行所有代码。

因此,开放平台npx op packup工具采用rollup工具并内置commonjs插件,支持cjs的代码使用import方式来引入。开发者只需要统一用import方式进行插件依赖引入即可。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
logo
项目管理
子站问答
访问
宣传栏