Ecmascript 6 如何使用babel或任何其他工具转换javascript导入语句

Ecmascript 6 如何使用babel或任何其他工具转换javascript导入语句,ecmascript-6,requirejs,babeljs,Ecmascript 6,Requirejs,Babeljs,我对ES6还不熟悉。因此,我有如下困难: 我写了classTopoPlaneClass.js: 导出默认类拓扑平面类{ } 并将{TopoPlaneClass}导入3D.js文件,如下所示 import {TopoPlaneClass} from "./topo/TopoPlaneClass.js"; 像TopoPlaneClass.js文件一样,我有很多文件 为了编译它,我使用了如下方法:npm-run-build package.json文件: "scrip

我对ES6还不熟悉。因此,我有如下困难:

我写了class
TopoPlaneClass.js

导出默认类拓扑平面类{
}
并将
{TopoPlaneClass}
导入
3D.js
文件,如下所示

import {TopoPlaneClass} from "./topo/TopoPlaneClass.js";
TopoPlaneClass.js
文件一样,我有很多文件

为了编译它,我使用了如下方法:
npm-run-build

package.json
文件:

"scripts": {    
    "build": "babel ./src/source -d compiled"
    
},

"scripts": {
    "build": "babel --presets es2015 src/source -d compiled"
},
因此,该类将被编译并存储在已编译文件夹中

但是
3D.js
文件如下所示,并且在将此文件加载到浏览器时,会给出require(…)的错误。

在这里,我不清楚该怎么做(如何转换文件,使所需函数可用或依赖关系得到解决)?

TL;博士 Babel仅将
import
语法转换为其他一些语法,如您的案例中的CommonJS
require
。在编写此答案时,最常用的工具是捆绑工具,如,等等,用于使
需要
调用在浏览器中工作

现代浏览器 导入声明是语言标准的一部分。在浏览器中,它们可用于通过
标记包含的脚本中,该标记的
类型
属性设置为
“模块”
,如下所示:

<script type="module" src="3d.js"></script>
{
  "presets": [["env", { "modules": "commonjs" }]]
}
并在项目根目录中创建一个
.babelrc
文件,内容如下:

<script type="module" src="3d.js"></script>
{
  "presets": [["env", { "modules": "commonjs" }]]
}
(在此之后,还必须删除package.json中的
--presets es2015

ESM前的模块 下一步取决于选择的解决方案。例如,如果您选择了
amd
,则必须包括一个模块加载程序,如。如果您坚持使用CommonJS,那么在浏览器中使用CommonJS的一个非常常见的解决方案就是将代码绑定到一个类似捆绑包的Web包中

现代的绑定器不仅仅是让require调用在浏览器中工作。它可能需要一些工作来设置,也将改变您应用babel的方式。这是一个例外,因为它只关注这一点,不会对您的工作流程造成太大的改变。在选择使用哪一个之前,你必须考虑每一个的权衡。

TL;博士 Babel仅将
import
语法转换为其他一些语法,如您的案例中的CommonJS
require
。在编写此答案时,最常用的工具是捆绑工具,如,等等,用于使
需要
调用在浏览器中工作

现代浏览器 导入声明是语言标准的一部分。在浏览器中,它们可用于通过
标记包含的脚本中,该标记的
类型
属性设置为
“模块”
,如下所示:

<script type="module" src="3d.js"></script>
{
  "presets": [["env", { "modules": "commonjs" }]]
}
并在项目根目录中创建一个
.babelrc
文件,内容如下:

<script type="module" src="3d.js"></script>
{
  "presets": [["env", { "modules": "commonjs" }]]
}
(在此之后,还必须删除package.json中的
--presets es2015

ESM前的模块 下一步取决于选择的解决方案。例如,如果您选择了
amd
,则必须包括一个模块加载程序,如。如果您坚持使用CommonJS,那么在浏览器中使用CommonJS的一个非常常见的解决方案就是将代码绑定到一个类似捆绑包的Web包中


现代的绑定器不仅仅是让require调用在浏览器中工作。它可能需要一些工作来设置,也将改变您应用babel的方式。这是一个例外,因为它只关注这一点,不会对您的工作流程造成太大的改变。在选择使用哪一个之前,你必须考虑每一个的折衷。

你可以从中删除自动编译部分,并将其分成一个单独的问题。另外,我建议删除
TopoPlaneClass
的主体,因为它不相关,而且会更容易阅读。是的,更新了,谢谢您可以从中删除自动编译部分,并将其作为一个单独的问题。另外,我建议删除
TopoPlaneClass
的主体,因为它不相关,而且会更容易阅读。是的,更新了,谢谢!我明白了一些事情,但不太清楚。如果你有任何博客或链接阅读,可以给我明确的想法。我需要对它有更多的了解。@PatelHardik有你设置现代js堆栈所需的所有工具。你不需要把所有的东西都放在那里,但是把所有的东西都放在一个地方是很好的,你可以根据需要阅读更多关于每个工具的信息。很好!我明白了一些事情,但不太清楚。如果你有任何博客或链接阅读,可以给我明确的想法。我需要对它有更多的了解。@PatelHardik有你设置现代js堆栈所需的所有工具。你不需要把所有的东西都放在那里,但是把所有的东西都放在一个地方很好,你可以根据需要阅读更多关于每个工具的信息。