CommonJS 在动态导入(导入 ES 模块)时也会抛出错误

问题描述 投票:0回答:1

我需要使用脚本作为

prebuild
,但由于模块不兼容,它无法工作。

我的脚本带有

.mjs
扩展名:
script.mjs

import helper from './src/helpers/file-helpers.js';
console.log(helper)          

当我启动它时(Node v18.16.0)

node script.mjs
,这就是结果:

import fs from 'fs/promises';
^^^^^^

SyntaxError: Cannot use import statement outside a module

我尝试了一切,每次出现相同的错误时也使用动态

import('./src/helpers/file-helpers.js').then(default => console.log(default)

旁注:我无法在 package.json 上添加

type="module"
,因为它会破坏我的项目。我也无法将文件
file-helpers.js
重命名为
.mjs
。有什么办法解决这个问题吗?我认为通过将所有内容包装在动态导入上应该可以工作,为什么
fs/promises
在这里如此困难?

javascript node.js es6-modules commonjs
1个回答
0
投票

不确定这是否适用于您的情况,但值得一试。它应该可以工作。
首先创建一个扩展名为 .js 的包装器脚本。从 script.mjs 文件导入 runScript 函数,然后执行它。这样,使用 ES6 模块语法的主脚本仍然是 .mjs 文件,但您可以使用 .js 文件作为入口点。

// wrapper.js
import { runScript } from './script.mjs'

runScript()

然后更新您的 script.mjs 以导出您要运行的功能,

// script.mjs
import helper from './src/helpers/file-helpers.js'

export function runScript() {
  console.log(helper)
}

然后在节点中运行包装器脚本,看看它是否有效。

© www.soinside.com 2019 - 2024. All rights reserved.