获取意外的令牌导出

2020/10/11 14:01 · javascript ·  · 0评论

我试图在我的项目中运行一些ES6代码,但出现意外的令牌导出错误。

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

您正在使用ES6模块语法。

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

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

解:

  • 使用babelnpm软件包将ES6转换为commonjs目标

要么

  • 使用CommonJS语法进行重构。

CommonJS语法的示例是(来自flaviocopes.com/commonjs/):

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

如果出现此错误,则可能还与将javascript文件包含到html页面中的方式有​​关。加载模块时,您必须像这样明确声明这些文件。这里是一个例子:

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

var bar = "bar";

export { foo, bar };

当包含这样的脚本时:

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

您将收到错误:

未捕获到的SyntaxError:意外的令牌导出

您需要包含类型属性设置为“模块”的文件:

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

那么它应该会按预期工作,并且您可以将模块导入另一个模块了:

import { foo, bar } from  "./module.js";

console.log( foo() );
console.log( bar );

我的两分钱

出口

ES6

myClass.js

export class MyClass1 {
}
export class MyClass2 {
}

other.js

import { MyClass1, MyClass2 } from './myClass';

CommonJS替代

myClass.js

class MyClass1 {
}
class MyClass2 {
}
module.exports = { MyClass1, MyClass2 }
// or
// exports = { MyClass1, MyClass2 };

other.js

const { MyClass1, MyClass2 } = require('./myClass');

导出默认值

ES6

myClass.js

export default class MyClass {
}

other.js

import MyClass from './myClass';

CommonJS替代

myClass.js

module.exports = class MyClass1 {
}

other.js

const MyClass = require('./myClass');

希望这可以帮助

要使用ES6,请添加 babel-preset-env

并在您的.babelrc

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

由于@ghanbari的评论适用了babel 7,答案得到了更新。

现在只需使用默认的JavaScript模块导出,就无需使用Babel(JS变得非常强大)。查看完整教程

Message.js

module.exports = 'Hello world';

app.js

var msg = require('./Messages.js');

console.log(msg); // Hello World

安装巴贝尔包@babel/core@babel/preset将ES6转换为CommonJS的目标为节点的js不直接了解ES6目标

npm install --save-dev @babel/core @babel/preset-env

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

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

我通过制作一个入口文件来解决这个问题。

// index.js
require = require('esm')(module)
module.exports = require('./app.js')

而且我在内部app.js外部导入的任何文件imports/exports
现在都可以运行
node index.js

注意:如果app.js使用export default,则require('./app.js').default在使用入口点文件时会变为

使用ES6语法在节点中不起作用,不幸的是,您显然必须具有babel才能使编译器理解诸如导出或导入之类的语法。

npm install babel-cli --save

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

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

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

{  "presets": ["es2015"] }

希望它能起作用... :)

本文地址:http://javascript.askforanswer.com/huoquyiwaidelingpaidaochu.html
文章标签: ,   ,   ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!