我正在用Node.js, Express.js和Jade组合写一个应用程序。

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

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

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

这些其他JavaScript文件也在运行时在客户机上加载,因为我将链接放在网页的头部。客户端知道从其他文件导出的所有函数。

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


当前回答

我确认。我们必须补充:

webPreferences: {
    nodeIntegration: true
}

例如:

mainWindow = new BrowserWindow({webPreferences: {
    nodeIntegration: true
}});

对我来说,问题已经解决了。

其他回答

即使使用这个也没用。我认为最好的解决方案是Browserify:

module.exports = {
  func1: function () {
   console.log("I am function 1");
  },
  func2: function () {
    console.log("I am function 2");
  }
};

-getFunc1.js-
var common = require('./common');
common.func1();

ES6:在HTML中,使用属性type="module"包含主JavaScript文件(浏览器支持):

<script type="module" src="script.js"></script>

在script.js文件中,包括另一个像这样的文件:

import { hello } from './module.js';
...
// alert(hello());

在包含的文件(module.js)中,你必须导出将要导入的函数/类:

export function hello() {
    return "Hello World";
}

下面是一个工作示例。更多信息在这里。

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

这条线

const {ipcRenderer} = require('electron')

没有定义require,抛出未捕获的ReferenceError

当浏览器窗口(嵌入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
        }
})}

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

window = new BrowserWindow({
    webPreferences: {
        nodeIntegration: true,
        contextIsolation: false
    }
});

人们在问什么是脚本标记方法。下面就是:

<script src='./local.js'></script>. 

或来自网络:

<script src='https://mycdn.com/myscript.js'></script>

你需要为你的脚本插入正确的url。