首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用继承时的BabelJS类排序

使用继承时的BabelJS类排序
EN

Stack Overflow用户
提问于 2017-03-19 00:31:10
回答 1查看 73关注 0票数 0

我正在尝试找到一种方法,让babel以特定的顺序加载文件,这样超类就会先于子类加载。

给出以下文件的示例:

src/fruit.js:

代码语言:javascript
复制
export class Fruit{
    constructor(color){
        this._color = color;
    }
}

src/apple.js:

代码语言:javascript
复制
export class Apple extends Fruit{
    constructor(){
        super("green");
    }
}

src/xecute.js:

代码语言:javascript
复制
var theApple = new Apple();

package.json

代码语言:javascript
复制
{
  "name": "fruit",
  "version": "1.0.0",
  "description": "Fruit JS",
  "scripts": {
    "build": "babel src -o out/fruit-bundle.js"
  },
  "author": "Toby Nilsen",
  "license": "MIT",
  "devDependencies": {
    "babel-cli": "^6.22.2",
    "babel-preset-es2015": "^6.5.0"
  }
}

.babelrc:

代码语言:javascript
复制
{
  "presets": ["es2015"]
}

当我编译我的文件时,下面的命令

代码语言:javascript
复制
npm run build

并使用以下命令运行我的out/fruit-bundle.js:

代码语言:javascript
复制
node out\fruit-bundle.js

我得到了以下错误:

代码语言:javascript
复制
TypeError: Super expression must either be null or a function, not undefined

这是因为babel在解析fruit.js之前解析了apple.js。我可以通过将我的文件重命名为0_fruit.js和1_apple.js来解决这个问题,但我想知道是否有任何方法可以让babel解决依赖关系并对输出进行排序,以便首先加载超类?

EN

回答 1

Stack Overflow用户

发布于 2017-03-19 00:55:58

巴别塔只是个转译器。它只是转换语法,但不会为你做捆绑。您将需要一个绑定器来以正确的顺序解析依赖项。考虑查看RollupWebpack。使用Rollup,无需缓存和其他构建优化的最简单方法是:

  • 运行汇总以将所有内容捆绑到一个文件中,然后对汇总的输出运行Babel。
  • 对所有文件运行Babel,然后使用汇总将它们全部捆绑。

另外,为了让捆绑器知道正确的顺序,可以从Apple导入Fruit

代码语言:javascript
复制
import Fruit from 'fruit';

export class Apple extends Fruit{
    constructor(){
        super("green");
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42876935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档