Javascript 获取意外的令牌导出

Javascript 获取意外的令牌导出,javascript,ecmascript-6,webpack,babeljs,Javascript,Ecmascript 6,Webpack,Babeljs,我试图在我的项目中运行一些ES6代码,但是我得到了一个意外的令牌导出错误 export class MyClass { constructor() { console.log("es6"); } } 您正在使用ES6模块语法 这意味着您的环境(例如node.js)必须支持ES6模块语法 NodeJS使用CommonJS模块语法(Module.exports)而不是ES6模块语法(export关键字) 解决方案: 使用babelnpm包将您的ES6传输到commonjs目标

我试图在我的项目中运行一些ES6代码,但是我得到了一个意外的令牌导出错误

export class MyClass {
  constructor() {
    console.log("es6");
  }
}

您正在使用ES6模块语法

这意味着您的环境(例如node.js)必须支持ES6模块语法

NodeJS使用CommonJS模块语法(
Module.exports
)而不是ES6模块语法(
export
关键字)

解决方案:

  • 使用
    babel
    npm包将您的ES6传输到
    commonjs
    目标

  • 使用CommonJS语法进行重构
CommonJS语法的示例有(来自):

  • exports.uppercase=str=>str.toUpperCase()
  • exports.a=1

使用ES6 add
babel预设环境

在您的
.babelrc
中:

{
  "presets": ["@babel/preset-env"]
}

答案更新感谢@ghanbari评论应用巴别塔7

如果出现此错误,可能还与如何将JavaScript文件包含到html页面中有关。加载模块时,必须显式声明这些文件。下面是一个例子:

//module.js:
function foo(){
   return "foo";
}

var bar = "bar";

export { foo, bar };
当您包含这样的脚本时:

<script src="module.js"></script>

使用ES6语法在node中不起作用,不幸的是,您必须使用babel,以使编译器理解诸如导出或导入之类的语法

npm install babel-cli --save
现在我们需要创建一个.babelrc文件,在babelrc文件中,我们将设置babel使用我们在编译到ES5时安装的es2015预设作为其预设

在应用程序的根目录下,我们将创建一个.babelrc文件。 $npm安装babel-preset-es2015--保存

在应用程序的根目录下,我们将创建一个.babelrc文件

{  "presets": ["es2015"] }

希望它能起作用……:)

安装babel软件包
@babel/core
@babel/preset
,这些软件包将把ES6转换为commonjs目标,因为node js无法直接理解ES6目标


npm安装——保存dev@babel/core@babel/preset env

然后,您需要在项目的根目录中创建一个名为
.babelrc
的配置文件,并在其中添加此代码

{

“预设”:[“@babel/preset env”] }

现在不需要使用Babel(JS已经变得非常强大),因为您可以简单地使用默认的JavaScript模块导出

Message.js

module.exports = 'Hello world';
var msg = require('./Messages.js');

console.log(msg); // Hello World
app.js

module.exports = 'Hello world';
var msg = require('./Messages.js');

console.log(msg); // Hello World

我通过创建一个入口点文件修复了这个问题,如

//index.js
require=require('esm')(模块)
module.exports=require('./app.js')
以及我在app.js中导入的任何文件及以后使用的
导入/导出
现在只需像
node index.js

注意:如果
app.js
使用
export default
,当使用入口点文件时,这将成为
require('./app.js')。default

我的2美分

出口 ES6

myClass.js

其他.js

CommonJS备选方案

myClass.js

其他.js

导出默认值 ES6

myClass.js

其他.js

CommonJS备选方案

myClass.js

其他.js


希望这有帮助

当我尝试在项目中导入本地javascript模块时,我也遇到了意外的令牌导出错误。在index.html文件中添加脚本标记时,我将一个类型声明为模块,从而解决了这个问题



有关您的环境或配置的信息不足,无法提供任何帮助。此错误表明webpack或babel工作不正常,因为
export
仅在ES6中可用,并且这些模块提供ES6支持。您应该使用
module.exports=MyClass
,而不是
export class MyClass
@monsto此问题已由作者标记为
babel
。虽然Phil Rickett的回答确实澄清了问题,这是一个很好的答案,但这个答案是作者问题的直接解决方案。“@babel/preset env”nodejs何时支持
本机导入
?我原以为v10.0.0会有它,但显然没有。@chovy实验支持可以通过flag--“实验模块”获得。文件需要有一个.mjs扩展名。我在使用Chrome 66时遇到了这个错误,并且本机支持模块。因为有些人仍然不清楚CommonJs语法。请签出此链接,可能会有所帮助。这真的不是一个有用的评论,但对于前端世界之外的人来说,这一切都相当混乱。只是想构建一个用于web的模块,我正在CLI中测试它。我假设Node.js是一个成熟的环境,它将支持ES6语法。与“最受欢迎”的答案不同,这实际上解决了问题,并解释了为什么会发生这种情况,但没有说明唯一的选择是利用CommonJS方法、APM方法或传输我们的代码。。。这也是w3c标准的一个例外,在w3c标准中,
type
应该是有效的mime类型(又名.media类型),因此这是一个意外的发现。谢谢这修复了错误,但我得到了“意外标记{”在Chrome 67中带有内联脚本的import语句行上,例如import…@PandaWood当您从模块导入时,必须使用
import…
。我在Chrome的最新版本中对其进行了测试。您必须将
放在哪个文件中?@inquisitive放在导入脚本的html文件中…我还需要安装@babel/register,否则我仍然会得到“SyntaxError:cannotuse import statement out a module”,那么如何导出类呢?@SherwinAblañaDapito module.exports=class MyClass{}worksBest答案适用于不需要babel、webpack、parcel等的简单项目。我在monorepo项目中使用simple/server express for project。工作起来很有魅力…非常好的答案。这样,我的项目中的许多不同模块文件可以紧密链接。而且方法非常简单!这个答案真的救了我一命。
export class MyClass1 {
}
export class MyClass2 {
}
import { MyClass1, MyClass2 } from './myClass';
class MyClass1 {
}
class MyClass2 {
}
module.exports = { MyClass1, MyClass2 }
// or
// exports = { MyClass1, MyClass2 };
const { MyClass1, MyClass2 } = require('./myClass');
export default class MyClass {
}
import MyClass from './myClass';
module.exports = class MyClass1 {
}
const MyClass = require('./myClass');