【发布时间】:2018-05-23 00:13:41
【问题描述】:
我对 nodejs 还很陌生。随着 nodejs 的发展(我刚刚安装了 v.10),目前在新的 nodejs 项目中使用 ES6 功能(导入语句等)最简单的方法是什么——“正常工作”。我想要最少的依赖和最快的“正常工作”路径的方法。
我发现网上的帖子有点混乱。
- Babel 之前是为我理解的这种事情安装的
- Node 10 表示 (Here) 使用 node --experimental-modules my-app.mjs 启用
- This post 看起来很权威,但我认为它更多地是关于创建包而不是使用语法。
请帮忙!我似乎收到以下错误;
import {MagentoAccountApi} from 'js-magento-client';
错误 1:
SyntaxError: Unexpected token {
at new Script (vm.js:74:7)
at createScript (vm.js:246:10)
at Object.runInThisContext (vm.js:298:10)
at Module._compile (internal/modules/cjs/loader.js:646:28)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:689:10)
at Module.load (internal/modules/cjs/loader.js:589:32)
at tryModuleLoad (internal/modules/cjs/loader.js:528:12)
at Function.Module._load (internal/modules/cjs/loader.js:520:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:719:10)
at startup (internal/bootstrap/node.js:228:19)
如果我尝试将文件重命名为具有扩展名 .mjs 并使用以下命令加载: node --experimental-modules .\mtest.mjs ,则会收到此错误:
(node:20224) ExperimentalWarning: The ESM module loader is experimental.
file:///F:/node/magento-test/mtest.mjs:1
import {MagentoAccountApi} from 'js-magento-client';
^^^^^^^^^^^^^^^^^
SyntaxError: The requested module 'js-magento-client' does not provide an export named 'MagentoAccountApi'
at ModuleJob._instantiate (internal/modules/esm/module_job.js:89:21)
我不知道这是包错误还是设置错误。
也许 Babel 仍然是完成这项工作的正确/最简单的方法..?我想我不想开始使用即将被弃用的东西。
【问题讨论】:
-
因为您才刚刚开始,您真的想使用实验性功能吗?您可以使用普通节点 CommonJS 模块语法(
require和exports)并避免所有实验性的东西(import和export),这几乎肯定会使开始变得更容易。 -
谢谢@loganfsmyth,是的,我确实想使用最新的功能。我发现 async / await 比 .then 结构和许多其他东西更直观和易于管理。
-
ES 模块语法是一项非常具体的功能,目前仍处于试验阶段。您仍然可以使用任意数量的其他功能,所以问题是,使用新的实验性模块语法的目标是什么。我会说“当前最简单的方法”是使用任何新功能而不是工作,但现在忽略 ES 模块语法。它仍处于试验阶段,因为它仍在不断变化,可能会发生变化。
-
为什么 Node.js 还不支持 es6 import/export 是因为它还不完善。 IMO,es6 导入/导出与一些 NPM 功能冲突,如
optionalDependencies(不确定是否应该关注)。由于require实际上是一个函数调用,因此您可以有条件地 要求一个模块来使可选依赖项在不存在时不会使进程崩溃;但是,es6 导入会破坏这一点,因为它不能是条件导入。 -
@momocow 这就是动态导入的用途。这不是 require 的替代品,因为它们是异步的。
标签: node.js ecmascript-6 babeljs