如何解决需求与导入Node.js脚本

q1qsirdb  于 2023-05-28  发布在  Node.js
关注(0)|答案(1)|浏览(373)

我正在做一个小的Node.js脚本,我想用途:

在同一个文件中。但我正在努力解决如何同时导入两个库的问题。
如果我的类型package.json类型是commonJs

  • 尝试导入import { loadJsonFile } from "load-json-file"时得到SyntaxError: Cannot use import statement outside a module
  • 如果我尝试用require("load-json-file")()加载,我会得到Error [ERR_REQUIRE_ESM]: require() of ES Module D:\Dev\my-project\node_modules\load-json-file\index.js from D:\Dev\fsvl-date-check\index.js not supported. Instead change the require of D:\Dev\my-project\node_modules\load-json-file\index.js in D:\Dev\my-project\index.js to a dynamic import() which is available in all CommonJS modules.

现在,如果我尝试将package.json切换到module

  • 我得到SyntaxError: Named export 'prompt' not found. The requested module 'prompt-sync' is a CommonJS module, which may not support all module.exports as named exports.,当我尝试像这样导入:import { prompt } from "prompt-sync";
  • 我得到ReferenceError: require is not defined in ES module scope, you can use import instead,如果我尝试像这样导入它:var prompt = require("prompt-sync")();

如何在同一个项目中使用这两个包?

vxqlmq5t

vxqlmq5t1#

在ES模块("type": "module")中:

你想做import prompt from 'prompt-sync';。虽然您可以从ES模块完全导入commonjs模块,但没有 named exports。因此只能导入默认导出。这两行中的任何一行都可以工作并执行相同的操作:

import { default as prompt} from 'prompt-sync';
import prompt from 'prompt-sync';

这是因为commonjs模块只有一个导出。

来自commonjs模块

要导入ES模块,您需要执行动态import,如错误消息所述:

const loadJsonFileModule = await import('load-json-file');

import()返回一个Promise,解析为一个模块。所以你需要在异步函数中调用它,或者使用.then来解析promise。
然后loadJsonFileModule是一个模块, Package 所有导出,而不是默认导出。因此,您需要执行类似loadJsonFileModule.loadJsonFile(...)的操作。

相关问题