3

我正在webpack使用带有 ReactJS on Rails 的 Rails 应用程序编译我的 ReactJS 客户端。我创建了一个 React 组件,它按照https://stackoverflow.com/a/41439980/5764661ckeditor中的建议导入库

安装配置完成后@ckeditor5,客户端编译完成。但是当我在 上浏览网站时localhost:3000,服务器端渲染在每个页面上都失败,并出现以下错误:

ReferenceError: navigator is not defined

这是回溯:

Object../node_modules/@ckeditor/ckeditor5-utils/src/env.js ((execjs):121221:17)
__webpack_require__ ((execjs):55:30)
Object../node_modules/@ckeditor/ckeditor5-utils/src/keyboard.js ((execjs):121652:12)
__webpack_require__ ((execjs):55:30)
Object../node_modules/@ckeditor/ckeditor5-engine/src/view/uielement.js ((execjs):90071:17)
__webpack_require__ ((execjs):55:30)
Object../node_modules/@ckeditor/ckeditor5-engine/src/view/writer.js ((execjs):90991:18)
__webpack_require__ ((execjs):55:30)
Object../node_modules/@ckeditor/ckeditor5-engine/src/view/view.js ((execjs):90336:15)
__webpack_require__ ((execjs):55:30)

我的 webpack 编译以单个块的形式退出

我不知道如何解决它。

4

1 回答 1

1

CKEditor 设计为在浏览器上运行,因为它是一个 Javascript 库。如您所知,React on Rails 将 Rails 与React 前端框架的(服务器渲染)集成在一起。因此,通过Server-Side Rendering,您的 react 组件首先在服务器上呈现为 HTML。

Webpack将模块捆绑在一起,首先提供给服务器,然后提供给浏览器。所以ckeditor库对于服务器来说是陌生的,因为它是一个 JS 库。因此,navigator is not defined被抛出。但是ckeditor考虑到客户端渲染,因为模块直接提供给浏览器,所以效果很好。

由于用例最少,有一些所见即所得的编辑器兼容在服务器上运行。据我所知,您可以使用codemirror-node作为替代方案,它将在 Node.js 上运行。

于 2019-08-10T06:21:40.140 回答