【问题标题】:ASP.Net Core JavaScript EngineASP.Net 核心 JavaScript 引擎
【发布时间】:2017-11-17 19:46:59
【问题描述】:

我正在使用ASP.Net Core (.NetCoreApp 1.1) + SpaServices + React + Redux + Webpack 进行该项目。 React 的真正强大之处在于服务器端的 JS 渲染。当您将IIS/Kestrel 与流行的 JS 库一起使用时,一切正常,但是当您尝试使用某些 UI 库时,服务器端呈现会崩溃。

我在我的项目中使用react-planner,它依赖于提供 WebGL 和画布渲染器的“三个”库。问题是 Asp.Net Core 默认 JS 引擎没有客户端浏览器中可用的“窗口”环境,因此服务器无法呈现某些 JS 库。 .Net 有一个名为 JavaScriptEngineSwitcher 的库,但它不支持 .NetCoreApp。我现在看到 3 种方式:

  1. 想办法切换默认 JS 引擎。
  2. 禁用服务器端渲染。
  3. 找到一种方法,只为 react-planner 关闭服务器端渲染。

有什么想法吗?

【问题讨论】:

  • 我不确定 any javascript 引擎是否支持windowwindow 是浏览器的全局变量。我会考虑选项 3 并检测您是否是服务器端渲染。
  • 在应用的主页面上有一个明确的选项来定义是否使用服务端渲染。我不知道如何仅对几个组件使用服务器端渲染,也不知道是否可行。

标签: javascript reactjs asp.net-core three.js .net-core


【解决方案1】:

有一个名为 JavaScriptEngineSwitcher 的 .Net 库,但它不支持 .NetCoreApp。

这个问题在JavaScript Engine Switcher version 2.X 和 React.NET 3.X 版本中得到解决。

引用自文档:

如果你基于“ASP.NET Core Web Application (.NET Core)”模板创建一个Web应用程序,那么你将只有四个JS引擎:JavaScriptEngineSwitcher.ChakraCoreJavaScriptEngineSwitcher.Msie(仅适用于JsRT模式) 、JavaScriptEngineSwitcher.JintJavaScriptEngineSwitcher.Vroom

现在关于window 对象:

问题是 Asp.Net Core 默认 JS 引擎没有客户端浏览器中可用的“窗口”环境,因此服务器无法渲染某些 JS 库。

window 对象不是 ECMAScript 规范的一部分,因为它是一个 DOM 对象。最有可能的是,在您的代码中有如下一行:

var root = typeof global !== 'undefined' ? global : window;

要在服务器上执行您的代码,您可以将此行替换为以下代码:

var global = this; // this line should be placed at the beginning of script
…
var root = global

【讨论】:

    猜你喜欢
    • 2011-09-12
    • 2021-06-16
    • 2017-10-23
    • 2016-10-13
    • 2017-07-29
    • 2021-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多