请问es6的模块化文件mjs为什么无法运行呢?

都是在同一目录下:

clipboard.png

main.mjs

import {add, minus} from "./math"

console.log(add(10, 20));
console.log(minus(30, 20));
//mjs目前还在实验中。使用node main.mjs无法运行。
//需要这样:

math.mjs

function add(x, y) {
    return x + y;
}

function minus(x, y) {
    return x - y;
}

export {add, minus};

运行代码:node --experimental-modules main.mjs
报错:


    (node:4200) ExperimentalWarning: The ESM module loader is experimental.
internal/modules/esm/default_resolve.js:69
  let url = moduleWrapResolve(specifier, parentURL);
            ^

Error: Cannot find module 'D:\workspace\WebstormProjects\2019\3\qdtest\es6\math' imported from D:\workspace\WebstormProjects\2019\3\qdtest\es6\main.mjs
    at Loader.resolve [as _resolve] (internal/modules/esm/default_resolve.js:69:13)
    at Loader.resolve (internal/modules/esm/loader.js:70:33)
    at Loader.getModuleJob (internal/modules/esm/loader.js:143:40)
    at ModuleWrap.<anonymous> (internal/modules/esm/module_job.js:43:40)
    at link (internal/modules/esm/module_job.js:42:36)
阅读 8.5k
3 个回答

import {add, minus} from "./math.mjs"

加扩展名

https://nodejs.org/api/esm.ht...

Mandatory file extensions

A file extension must be provided when using the import keyword. Directory indexes (e.g. './startup/index.js') must also be fully specified.

This behavior matches how import behaves in browser environments, assuming a typically configured server.

No NODE_PATH

NODE_PATH is not part of resolving import specifiers. Please use symlinks if this behavior is desired.

No require, exports, module.exports, __filename, __dirname

These CommonJS variables are not available in ES modules.

require can be imported into an ES module using module.createRequire().

An equivalent for __filename and __dirname is import.meta.url.

No require.extensions

require.extensions is not used by import. The expectation is that loader hooks can provide this workflow in the future.

No require.cache

require.cache is not used by import. It has a separate cache.

node 里 ES module,import 文件的时候必须包括扩展名。

ES module 里无法使用 require, exports, module.exports, __filename, __dirname

我也这样,最后你怎么解决啊?

新手上路,请多包涵

import {add, minus} from "./math.mjs"

导入要加上拓展名

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题