node.js 中意外的保留字导入

问题描述 投票:0回答:5

我正在尝试运行node.js后端服务器。我在 Node.js 文件中导入时收到错误

unexpected reserved word

文件

core.module.js
中的行是:

'use strict';
import lodashMixins from './lodashMixins.js'
... other imports and configurations ...

我启动简单的命令:

node core.module.js

这并不是罕见的错误,但通常会发生在其他库中。我还没有看到 Node.js 的解决方案。我应该如何解决这个问题?我正在使用 Windows Server。

编辑:我发现它是ES6,但我如何启动它?它看起来像应用程序的后端,但我不知道应该使用什么命令来启动它而不会出现错误。

javascript node.js ecmascript-6 importerror
5个回答
54
投票

import
ECMAScript 2015 (ES6) standard
的一部分,正如上面
Amit
提到的,它目前尚未在 Nodejs 中原生实现。

因此您可以使用像

babel
这样的转译器来运行您的
es6
脚本

npm install babel

基于此的示例答案

app.js

 import {helloworld,printName} from './es6'
 helloworld();
 printName("John");

es6.js

 module.exports = {
    helloworld: function() { console.log('hello world!'); },
    printName: function(name) { console.log(name); }
}

并在

start.js
中使用 require hook

require("babel/register");
var app = require("./app.js");

并启动您的应用程序

node start.js

编辑 以上答案是基于

babel v5.8.23
。为了
babel >= v6

start.js
中使用 require hook 作为

require('babel-core/register');
require("./app.js");

此外,默认情况下不启用转换。所以你需要安装一个

preset
。在这种情况下使用 es2015

npm install babel-preset-es2015

并在根文件夹中的

.babelrc
文件中使用它

{
   "presets": ["es2015"]
}

36
投票

import
关键字是ECMAScript 2015模块功能的一部分,还有
export
和一些其他规范。

目前它还没有在 NodeJS 中原生实现,即使在最新版本 (v0.12.7) 上也是如此,ES2015“更友好”的 iojs 分支也不支持它。

您需要使用转译器才能使其正常工作。

[编辑] 尽管存在

--harmony_modules
标志,但它在最新版本 (v5.8) 中仍然不受支持,该标志 什么都不做。最好的运行方式是使用 babel,如herehere

所解释

2
投票

当我在 Visual Studio 之外手动安装这些工具时,我遇到了这个问题。但 Visual Studio 附带了多个用于现代 Web 开发工作流程的开源命令行工具。您可以通过以下方式告诉 Visual Studio 使用与您手动安装的版本相同的版本

转到工具 –> 选项 –> 项目和解决方案 –> 外部 Web 工具

  • 将全局PATH环境变量设置在内部路径之前,您可以使用右上角的箭头来更改顺序。

  • 首先,找到您已经安装的 Node.js 并在命令行中使用。 默认情况下,Node.js 0.12.7 安装到“C:\Program Files 奥杰斯”。将此条目添加到 Node.js 目录的路径顶部,以强制 Visual Studio 使用该版本

0
投票

这可能不是官方答案,但我在搜索“意外的保留字”后偶然发现了这里。 经过一番探索后,我发现我的问题是,事实上,我只需要在从 origin/rebase 更新我的分支后运行

npm install
即可。 希望这可以帮助那些正在疯狂地恢复代码并试图找出他们破坏了什么的人! :)


0
投票

就我而言,问题是我在 forEach 块中使用

aait
以及使用 Javascript 的 AWS Lamba

 describeSnapshotResponse.Snapshots
    .map(currentSanpshot => currentSanpshot.SnapshotId)
    .forEach(currentSanpshotId) => {
        console.log("About to delete snapshot:", currentSanpshotId);            
        const deleteSnapshotCommand = new EC2.DeleteSnapshotCommand({
            SnapshotId: currentSanpshotId
        });
        
        const deleteSnapshotResponse = await ec2Client.send(deleteSnapshotCommand);
        console.log("Delete snapshot:", currentSanpshotId);            
    });

在块参数上使用 async 修饰符可以实现如 在 Yilmaz 响应中使用 async/await 和 forEach 循环

所示的技巧
 describeSnapshotResponse.Snapshots
    .map(currentSanpshot => currentSanpshot.SnapshotId)
    .forEach(async (currentSanpshotId) => {
        console.log("About to delete snapshot:", currentSanpshotId);            
        const deleteSnapshotCommand = new EC2.DeleteSnapshotCommand({
            SnapshotId: currentSanpshotId
        });
        
        const deleteSnapshotResponse = await ec2Client.send(deleteSnapshotCommand);
        console.log("Delete snapshot:", currentSanpshotId);            
    });
© www.soinside.com 2019 - 2024. All rights reserved.