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
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
这个错误表明你的 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:
协议导入,例如 import fs from 'node:fs'
如果使用第三方只支持 CommonJS 的模块,可以使用动态导入:
const { myFunction } = await import('commonjs-module');
出现如问题的描述,说明插件正在使用require
方式来引入项目依赖。这种方式的依赖可能会导致插件实际托管运行在ONES时出现该依赖包无法找到的问题。
ONES插件托管环境充分支持 ES 模块规范(ESM),不支持CommonJS(CJS)。
原因如下:
ES模块(ESM)和CommonJS的核心区别在于:ESM输出的是值的动态引用,且模块依赖在编译时静态分析;而CommonJS输出的是值的静态拷贝,依赖在运行时动态加载。
对于插件运行,我们需要在编译打包时期明确所有的依赖以确保在运行时能够如我们所愿正确运行所有代码。
因此,开放平台npx op packup
工具采用rollup
工具并内置commonjs
插件,支持cjs的代码使用import方式来引入。开发者只需要统一用import
方式进行插件依赖引入即可。
升级下op(
@ones/cli-plugin@1.29.27
)工具自动检测,若发现使用了
require
用法会提示让改成import
方式;