【发布时间】:2016-01-19 12:37:49
【问题描述】:
我有一个 NodeJS (v5.0.0)、Express 和 React 应用程序。
我插入了一些同构,所以我的一些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