【问题标题】:Harmony Collections Aren't Defined In NodeJS 5在 NodeJS 5 中没有定义 Harmony 集合
【发布时间】:2016-01-19 12:37:49
【问题描述】:

我有一个 NodeJS (v5.0.0)、ExpressReact 应用程序。
我插入了一些同构,所以我的一些React 应用程序组件被加载到NodeJS

服务器因错误而崩溃:ReferenceError: Set is not defined 在我的 Alt 商店之一中:

import alt from '../alt';
import NewProjectActions from '../actions/NewProjectActions';
import LoginStore from './LoginStore';
import { Base64 } from 'js-base64';
import limits from '../../limits';

class NewProjectStore {
  constructor() {
    this.bindActions(NewProjectActions);
    //State
    this.activeStage = 1;
    this.projectID = null;
    this.projectName = '';
    this.hasActiveComponentFinished = false;
    this.isLoading = false;
    this.assessment = [];
    this.selectedClasses = [];
    this.assignmentsUploaded = new Set(); <------ THIS LINE FAILS

    The page goes on........

我尝试用Map 替换它,但它也崩溃了。 奇怪的是,您可以看到我正在使用 ES6 import 并且运行良好。
我还检查了 NodeJS Docs,它表明 Harmony 集合是随 NodeJS 一起提供的,不需要任何运行时标志。

我刚刚更新了我的Babel,所以也许这与它有关。
更新:只是为了详细说明一下,我开始使用Require Hooks

有人有想法吗? 不用说我已经通过谷歌搜索过了。

感谢您的帮助!

更新:我尝试在我的server.js 页面中使用Set,它成功了。似乎问题真的是Babel 浏览这些页面,而不是NodeJS。 我还是不知道为什么它不同意 ES6 集合。

这是完整的错误堆栈跟踪:

ReferenceError: Set is not defined
    at Store.NewProjectStore (NewProjectStore.js:18:36)
    at new Store (/home/ec2-user/projects/peer_reviews/node_modules/alt/lib/store/index.js:155:73)
    at Object.createStoreFromClass (/home/ec2-user/projects/peer_reviews/node_modules/alt/lib/store/index.js:175:15)
    at Alt.createStore (/home/ec2-user/projects/peer_reviews/node_modules/alt/lib/index.js:129:77)
    at Object.<anonymous> (NewProjectStore.js:99:20)
    at Module._compile (module.js:456:26)
    at loader (/home/ec2-user/projects/peer_reviews/node_modules/babel-register/lib/node.js:130:5)
    at Object.require.extensions.(anonymous function) [as .js] (/home/ec2-user/projects/peer_reviews/node_modules/babel-register/lib/node.js:140:7)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at Object.<anonymous> (/home/ec2-user/projects/peer_reviews/app/routes.js:17:24)
    at Module._compile (module.js:456:26)
    at loader (/home/ec2-user/projects/peer_reviews/node_modules/babel-register/lib/node.js:130:5)
    at Object.require.extensions.(anonymous function) [as .js] (/home/ec2-user/projects/peer_reviews/node_modules/babel-register/lib/node.js:140:7)

【问题讨论】:

  • 我相信你需要一个 polyfill 来在前端使用集合,即使是 babel。
  • Set 一直工作到现在。在浏览器和NodeJS 中,它像Array 一样受到支持。这不被认为是后端吗?
  • 我认为既然你说它在你的 server.js 页面上工作,那么这是 React 前端。
  • 不,这很奇怪。当我尝试运行应用程序时会发生这种情况。 Babel 穿过 imports 并卡在 NewProjectStore.js
  • 我猜这与您的 webpack 配置错误有关。无论如何,也许其他人有一个实际的答案。

标签: javascript node.js express ecmascript-6 babeljs


【解决方案1】:

我相信与BabelRequire Hooks 相关的错误。 docs 说它更适合简单的使用,因为 Babel 6 太新了,我想这只是一个错误。

我通过从命令行切换到激活 Babel 来修复它。
各种方式激活Babel的说明见here

祝大家好运。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-26
    • 1970-01-01
    • 2015-03-13
    • 2019-07-31
    • 2019-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多