Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我的导入在Chrome 67的EMCAScript 6中不起作用?_Javascript_Ecmascript 6 - Fatal编程技术网

Javascript 为什么我的导入在Chrome 67的EMCAScript 6中不起作用?

Javascript 为什么我的导入在Chrome 67的EMCAScript 6中不起作用?,javascript,ecmascript-6,Javascript,Ecmascript 6,我已经研究了几个星期,在过去的两天里花了几个小时,但是我找不到一个合适的答案 我已经读过好几次了,最新的Chrome版本支持ECMAScript 6,并且支持导入/导出语句 那么为什么我的下面的脚本返回错误呢 错误: index.js:1 Uncaught SyntaxError: Unexpected token { 我的代码: // Player.js export class Player { constructor() { this.name = 'TestPlayer2'

我已经研究了几个星期,在过去的两天里花了几个小时,但是我找不到一个合适的答案

我已经读过好几次了,最新的Chrome版本支持ECMAScript 6,并且支持导入/导出语句

那么为什么我的下面的脚本返回错误呢

错误:

index.js:1 Uncaught SyntaxError: Unexpected token {
我的代码:

// Player.js
export class Player {
  constructor() {
    this.name = 'TestPlayer2';
  }
}

// index.js
import { Player } from './Player.js';
let MyPlayer = new Player();
window.alert(MyPlayer.name);

// index.html
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>JS Import Test</title>
</head>
<body>
Test
<script type="text/javascript" src="index.js"></script>
</body>
</html>
//Player.js
出口级玩家{
构造函数(){
this.name='TestPlayer2';
}
}
//index.js
从'/Player.js'导入{Player};
让MyPlayer=新玩家();
window.alert(MyPlayer.name);
//index.html
JS导入测试
试验
最近的浏览器不支持这些导入和导出语句吗?
他们有过吗?
为什么每个EMCAScript 6主题/博客/帖子都说最近的浏览器支持这一点?
浏览器是否支持其他导入/导出格式?
我不介意在index.html中添加源Player.js源文件,但我还需要node.js服务器上的Player.js文件,在那里我必须使用导入/导出


编辑:在人们建议使用webpack等工具后,我重新编写了这个问题。我用webpack实现了这一点,但我想了解为什么它不能按原样工作,因为我在所有地方都看到浏览器支持这一点

我可能会使用webpack将我的文件编译成一个大文件。

我现在只想知道这(不)是怎么工作的。最新版本的chrome支持Es6模块。您应该使用import语句,而不是require语句

如果您需要完成它,而不麻烦尝试webpack。Webpack在开始时可能会变得有点复杂,您可以尝试使用parcel,它是Webpack的替代品,支持在浏览器端加载模块,并且完成它所需的配置更少

为什么这在JS中如此复杂

Javascript仍然是一种非常年轻的语言,它必须在不同版本的各种引擎上工作,因此新的语言特性需要很长时间才能在任何地方得到支持。三年多前,eople认为模块在JS中很有用,并将其添加到语言中,但大多数浏览器还不支持它,Nodejs刚刚推出了一个支持它的测试版。因此,直到您能够在生产中使用模块,这将需要几年时间


到那时为止,您必须生成没有模块的代码,这意味着将所有代码复制并粘贴到frontend.js和backend.js中。由于这是太多的工作,有,这允许你做的正是。只需使用导入和导出编写代码,然后使用Webpack生成前端和后端捆绑包。

Node.js不支持ES模块(它在标志后面支持,但未完成)。它只支持CommonJS、module/require样式。一些浏览器现在支持ES模块,但不支持CommonJS。您必须使用类似的工具将CommonJS文件及其依赖项捆绑到一个脚本文件中,以便在浏览器中使用。我不知道这意味着什么…@goto bus stop我可以在服务器和客户端上使用browserify吗?它们确实有不同的依赖项,但看起来它只会遍历我的所有文件,并提取其中声明的依赖项?
为什么JS中的依赖项如此复杂?
,因为JS必须在几个不同的浏览器上使用几百个不同的版本。@JonasW。不仅仅是浏览器,还有各种引擎(节点、Rhino等)。如果您使用本机方法,则需要添加指向根js文件的脚本标记。你应该在静态web服务器上运行它,否则模块加载将不起作用。我要做的所有更改是:-没有注意到这一点,因为这对我来说毫无意义。我使用webpack时得到了这个,我仍然想知道为什么默认情况下它不起作用,特别是当所有关于这个主题的信息都说最近的浏览器确实支持它时。@pascal询问你的一些朋友/家人他们使用的是哪种chrome版本。也许他们中的大多数人都从一年前就没有更新过我不在乎。。。我不想支持旧的浏览器。但它在我的浏览器中也不起作用,这是Chrome的最新版本。。。(在Firefox中也尝试过,同样的错误)@pascal是的,你必须用你的服务器端代码为所有的js文件提供服务(在某些浏览器中可能还只是测试版),该主题在接受的答案中指出,Chrome 61支持这一功能,但显然不起作用?