Node.js 上的客户端:未捕获的 ReferenceError:未定义要求

新手上路,请多包涵

我正在使用 Node.js、Express.js 和 Jade 组合编写应用程序。

我有文件 client.js ,它加载在客户端上。在该文件中,我有从其他 JavaScript 文件调用函数的代码。我的尝试是使用

var m = require('./messages');

为了加载 messages.js 的内容(就像我在服务器端做的那样),然后从该文件中调用函数。但是,在客户端没有定义 require ,它会抛出 Uncaught ReferenceError: require is not defined 形式的错误。

这些其他 JavaScript 文件也在客户端运行时加载,因为我将链接放在网页的标题处。所以客户端知道从这些其他文件中导出的所有功能。

如何从打开服务器套接字的主 messages.js 文件中的这些其他 JavaScript 文件(例如 client.js )调用这些函数?

原文由 MightyMouse 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

这是因为 require() 在浏览器/客户端 JavaScript 中不存在。

现在,您将不得不对客户端 JavaScript 脚本管理做出一些选择。

你有三个选择:

  1. 使用 <script> 标签。

  2. 使用 CommonJS 实现。它具有像 Node.js 这样的同步依赖项

  3. 使用 异步模块定义(AMD) 实现。

CommonJS 客户端实现包括(其中大多数在部署之前需要构建步骤):

  1. Browserify - 您可以在浏览器中使用大多数 Node.js 模块。这是我个人的最爱。

  2. Webpack - 做所有事情(捆绑 JavaScript 代码、CSS 等)。它因 React 的激增而流行起来,但因其难以学习的曲线而臭名昭著。

  3. Rollup - 一个新的竞争者。它利用 ES6 模块并包括摇树功能(删除未使用的代码)。

您可以阅读更多关于我对 Browserify 与(已弃用)组件 的比较。

AMD 实施包括:

  1. RequireJS - 在客户端 JavaScript 开发人员中非常流行。由于它的异步性质,这不是我的口味。

请注意,在您选择使用哪一个时,您将阅读有关 Bower 的信息。 Bower 仅用于包依赖项,对 CommonJS 和 AMD 等模块定义没有意见。

原文由 JP Richardson 发布,翻译遵循 CC BY-SA 4.0 许可协议

我来自 Electron 环境,我需要在渲染器进程和主进程之间进行 IPC 通信。呈现器进程位于脚本标记之间的 HTML 文件中,并生成相同的错误。

线

const {ipcRenderer} = require('electron')

抛出 Uncaught ReferenceError: require is not defined

当浏览器窗口(嵌入此 HTML 文件的位置)最初是在主进程中创建时,我可以通过将 Node.js 集成指定为 true 来解决这个问题。

 function createAddItemWindow() {

    // Create a new window
    addItemWindown = new BrowserWindow({
        width: 300,
        height: 200,
        title: 'Add Item',

        // The lines below solved the issue
        webPreferences: {
            nodeIntegration: true,
            contextIsolation: false
        }
})}

这为我解决了这个问题。 这里 提出了解决方案。

原文由 Kibonge Murphy 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题