我不明白是怎么回事。 节点v5.6.0 NPM v3.10.6

代码:

function (exports, require, module, __filename, __dirname) {
    import express from 'express'
};

错误:

SyntaxError: Unexpected token import
    at exports.runInThisContext (vm.js:53:16)
    at Module._compile (module.js:387:25)
    at Object.Module._extensions..js (module.js:422:10)
    at Module.load (module.js:357:32)
    at Function.Module._load (module.js:314:12)
    at Function.Module.runMain (module.js:447:10)
    at startup (node.js:140:18)
    at node.js:1001:3

当前回答

在我的情况下,它是看着.babelrc文件,它应该包含这样的东西:

{
  "presets": ["es2015-node5", "stage-3"],
  "plugins": []
}

其他回答

在我的情况下,它是看着.babelrc文件,它应该包含这样的东西:

{
  "presets": ["es2015-node5", "stage-3"],
  "plugins": []
}

正如在其他回答中提到的,Node JS目前不支持ES6导入。

(从现在开始,请阅读EDIT 2)

在node js中启用ES6导入可以解决这个问题。我试过这个方法,对我很有效。

执行如下命令:

    npm install babel-register babel-preset-env --save-dev

现在需要创建一个新文件(config.js),并向其中添加以下代码。

    require('babel-register')({
        presets: [ 'env' ]
    })
    // Import the rest of our application.
    module.exports = require('./your_server_file.js')

现在您可以编写import语句而不会得到任何错误。

希望这能有所帮助。

编辑:

您需要运行使用上述代码创建的新文件。我用的是config.js。所以我得跑了:

    node config.js

编辑2:

在试验过程中,我发现了一个简单的解决方法。

在项目的根目录下创建.babelrc文件。

添加以下(和任何其他你需要的babel预设,可以添加在这个文件中):

    {
        "presets": ["env"]
    }

使用npm Install babel-pre -env——save命令安装babel-cli,然后使用npm Install babel-cli -g——save命令安装babel-cli

现在,转到服务器或索引文件所在的文件夹,使用以下命令运行: babel-node fileName.js

或者你也可以使用npm start运行,在你的包中添加以下代码。json文件:

    "scripts": {
        "start": "babel-node src/index.js"
    }

我一直想把它修好。以下是有效的方法:

使用最新的节点版本。我使用的是v14.15.5。运行:node——version来验证你的版本 命名文件,使它们都以.mjs而不是.js结尾


例子:

mod.mjs

export const STR = 'Hello World'

test.mjs

import {STR} from './mod.mjs'
console.log(STR)

执行命令node test.mjs

你应该看到“Hello World”。

我要在最初的问题中解决另一个问题,没有人问过这个问题。最近在我自己的NodeJS项目中从CommonJS转换到ESM后,我很少看到关于你不能像require那样把导入放在你想要的任何地方的讨论。我的项目现在使用导入工作得很好,但是当我使用问题中的代码时,我首先得到一个没有命名函数的错误。命名函数后,我收到以下…

import express from 'express'
       ^^^^^^^

SyntaxError: Unexpected identifier
    at Loader.moduleStrategy (internal/modules/esm/translators.js:88:18)

您不能像需要的那样在函数中导入。它们必须放在文件的顶部,在代码块之外。我自己在这个问题上也浪费了不少时间。

因此,虽然上面所有的答案都能很好地帮助您在项目中导入,但没有一个能解决原始问题中的代码不能像编写的那样工作的问题。

如果你可以使用'babel',试着在package.json(——presets=es2015)中添加构建脚本,如下所示。它可以预编译导入代码到es2015

"build": "babel server --out-dir build --presets=es2015 && webpack"