Nodejs5 和 babel 中的“意外令牌导入”?

IT技术 javascript node.js ecmascript-6 babeljs package.json
2021-02-27 12:36:34

在 js 文件中,我使用 import to 而不是 require

import co from 'co';

并尝试通过 nodejs 直接运行它,因为它说导入是“运输功能”并且支持没有任何运行时标志(https://nodejs.org/en/docs/es6/),但我收到一个错误

import co from 'co';
^^^^^^

SyntaxError: Unexpected token import

然后我尝试使用 babel

npm install -g babel-core
npm install -g babel-cli
npm install babel-core //install to babel locally, is it necessary?

并运行

babel-node js.js

仍然有同样的错误,意外的令牌导入?

我怎么能摆脱它?

6个回答

来自 babel 6 发行说明:

由于 Babel 专注于成为 JavaScript 工具平台而不是 ES2015 转译器,我们决定让所有插件都选择加入。这意味着当您安装 Babel 时,默认情况下它将不再转译您的 ES2015 代码。

在我的设置中,我安装了 es2015 预设

npm install --save-dev babel-preset-es2015

或用纱线

yarn add babel-preset-es2015 --dev

并在我的 .babelrc 中启用预设

{
  "presets": ["es2015"]
}
JS生态就是这么简单
2021-04-24 12:36:34
babel-nodees2015react预设一起使用同样的错误。
2021-05-03 12:36:34
对我来说,这是一个简单的修复。我陷入了隧道视野,试图将一个 react/babel 项目中的代码改编到另一个 es5 项目中,并同时升级到 es6 语法。在脚本下的 package.json 中,我忘记将“node run”替换为“babel-node run.js”。是的,我觉得很害羞。:)
2021-05-04 12:36:34
好答案。不幸的是,您仍然需要使用 require() 并且不能对 npm 包使用 import 。
2021-05-07 12:36:34
不工作。是的,这是必需的,但它不会使导入工作。
2021-05-15 12:36:34

在实现module之前,您可以使用 Babel“转译器”来运行您的代码:

npm install --save babel-cli babel-preset-node6

接着

./node_modules/babel-cli/bin/babel-node.js --presets node6 ./your_script.js

如果您不想输入--presets node6,可以通过以下方式保存 .babelrc 文件:

{
  "presets": [
    "node6"
  ]
}

请参阅https://www.npmjs.com/package/babel-preset-node6https://babeljs.io/docs/usage/cli/

在此之后,我开始收到错误(无法识别的令牌“<”):server.js: Unexpected token (37:12) 35 | const initialState = store.getState(); 36 | const componentHTML = renderToString( > 37 | <Provider store={store}> | ^ 38 | <RouterContext {...props} /> 39 | </Provider>, 40 | );
2021-04-27 12:36:34
babel 人员的最新建议是使用babel-preset-env来检测要运行的 polyfill,而不是babel-preset-node*. .babelrc使用:{ "presets": [ ["env", { "targets": { "node": "current" } }] ] }
2021-05-05 12:36:34
  1. 安装包:babel-core, babel-polyfill,babel-preset-es2015
  2. 创建.babelrc内容:{ "presets": ["es2015"] }
  3. 不要把import语句放在你的主入口文件中,使用另一个文件,例如:app.js你的主入口文件应该是必需的,babel-core/register并且babel-polyfill首先让 babel 在其他任何事情之前单独工作。然后你可以要求app.jswhereimport语句。

例子:

索引.js

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

应用程序.js

import co from 'co';

它应该与node index.js.

优秀的答案。但是在脚本中,您可以放置​​如下内容。所以你可以在任何文件中使用。"scripts": { "build": "babel src -d dist", "start": "node dist/index.js" }
2021-05-05 12:36:34
等等……这是我想的吗?几个月前,我有一个梦想,即 javascript/perl/任何语言都可以通过自定义额外解析相同语言的现有语言而无需更新即可扩展。这到底是怎么回事???
2021-05-09 12:36:34
这是一种可用于开发的简单解决方法。尽管对于生产,您应该始终编译您的 es5 代码。
2021-05-17 12:36:34

babel-preset-es2015 现在已弃用,如果您尝试使用 Laurence 的解决方案,您将收到警告。

要使其与 Babel 6.24.1+ 一起使用,请babel-preset-env改用:

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

然后添加env到您的预设中.babelrc

{
  "presets": ["env"]
}

有关更多信息,请参阅Babel 文档

有没有办法用 CLI 做到这一点?
2021-04-25 12:36:34

如果您使用 react-native 的预设,它会接受导入

npm i babel-preset-react-native --save-dev

并将其放入您的 .babelrc 文件中

{
  "presets": ["react-native"]
}

在您的项目根目录中

https://www.npmjs.com/package/babel-preset-react-native