4

--experimental-modulesフラグ付きの Node.js v8.7.0 で次の構文を使用して ESM モジュールにインポートしようとしました。

import { check, validationResult } from 'express-validator/check';
import { matchedData, sanitize } from 'express-validator/filter';

ただし、次のエラーが発生します。

(node:29028) ExperimentalWarning: The ESM module loader is experimental.
SyntaxError: The requested module does not provide an export named 'check'
    at checkComplete (internal/loader/ModuleJob.js:86:27)
    at moduleJob.linked.then (internal/loader/ModuleJob.js:69:11)
    at <anonymous>

--experimental-modulesフラグ付きでオンになっている ESM モジュールの正しい使用法は何ですか?

@std/esmパッケージでもテストしました。Iターンのみ動作しますcjs: true

4

3 に答える 3

3

これは、Node.js では、CommonJS モジュールを介してインポートされimportたものがデフォルトのエクスポートのみを持っているために発生します*。

インポートしているモジュールが ES モジュールでない場合 (express-validator の場合)、できることは次のようなことだけです。

import checkAPIs from 'express-validator/check';
import filterAPIs from 'express-validator/filter';

const { check, validationResult } = checkAPIs;
const { matchedData } = filterAPIs;

* ソース: https://medium.com/the-node-js-collection/an-update-on-es6-modules-in-node-js-42c958b890c

于 2017-10-25T12:29:34.513 に答える