Ecmascript 6 同构应用程序和浏览器特定代码

Ecmascript 6 同构应用程序和浏览器特定代码,ecmascript-6,webpack,isomorphic-javascript,Ecmascript 6,Webpack,Isomorphic Javascript,我正在构建一个具有webpack、React、ES6和fluxible的同构应用程序,并且遇到了以下关于浏览器特定模块导入的问题 例如,我想使用React组件中的imagesloaded。此操作的代码如下所示: import React, { PropTypes, Component, findDOMNode } from "react"; import imagesLoaded from "imagesloaded"; 但是,很明显,它首先尝试在服务器端进行导入,代码失败得很惨,出现了一个错

我正在构建一个具有webpack、React、ES6和fluxible的同构应用程序,并且遇到了以下关于浏览器特定模块导入的问题

例如,我想使用React组件中的imagesloaded。此操作的代码如下所示:

import React, { PropTypes, Component, findDOMNode } from "react";
import imagesLoaded from "imagesloaded";
但是,很明显,它首先尝试在服务器端进行导入,代码失败得很惨,出现了一个错误:

ReferenceError: window is not defined
问题是-我应该采取什么方法使代码只包含在浏览器端版本中?我想我正在寻找类似的东西:

if (process.env.BROWSER) {
  require("../style/components/Shop.scss");
}

谢谢

您可以使用与您提到的完全相同的方法,使用
require

if (process.env.BROWSER) {
   require("imagesloaded");
}
那就行了。 此外,还有更多选项可供选择:

  • 为节点环境提供库的假实例。你可以用它

  • 创建窗口的假实例。AFAIK不依赖于特定于浏览器的特性,只将窗口用作全局名称空间,所以您可以为其创建别名

  • 像这样的代码:

    global.window = global
    

    我已经完成了,现在我面临一个不同的错误:找不到模块:错误:无法在/Users/opportunato/projects/grabr web client/node_modules/imagesloaded中解析模块'eventEmitter/eventEmitter',我必须创建一个不同的错误,因为它更多地与作为模块的图像相关,而不是与它在同构中的使用相关。看起来这个库依赖于另一个库。尝试导入
    imagesloaded/imagesloaded.pkgd.js
    。这个文件已经绑定了dependencies我在这里打开了一个问题,看起来AMD的定义有一些错误,或者我做错了什么。谢谢