我需要使用脚本作为
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
在这里如此困难?
不确定这是否适用于您的情况,但值得一试。它应该可以工作。
首先创建一个扩展名为 .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)
}
然后在节点中运行包装器脚本,看看它是否有效。