同构应用程序和特定于浏览器的代码
Isomorphic app and browser-specific code
我正在使用 webpack、React、ES6 和 fluxible 构建同构应用程序,并且 运行 涉及以下关于浏览器特定模块导入的问题。
例如,我想在我的 React 组件中使用图像加载。代码如下所示:
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");
}
那行得通。
还有更多选择:
为节点环境提供库的假实例。你可以用mockery,对它来说。
创建 window 的假实例。 AFAIK,imagesloaded 不依赖浏览器特定的功能,仅使用 window 作为全局命名空间,因此您可以为其创建别名。
喜欢这个代码:
global.window = global
我正在使用 webpack、React、ES6 和 fluxible 构建同构应用程序,并且 运行 涉及以下关于浏览器特定模块导入的问题。
例如,我想在我的 React 组件中使用图像加载。代码如下所示:
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");
}
那行得通。 还有更多选择:
为节点环境提供库的假实例。你可以用mockery,对它来说。
创建 window 的假实例。 AFAIK,imagesloaded 不依赖浏览器特定的功能,仅使用 window 作为全局命名空间,因此您可以为其创建别名。
喜欢这个代码:
global.window = global