我正在使用 Node.js、Express.js 和 Jade 组合编写应用程序。
我有文件 client.js
,它已加载到客户端。在该文件中,我有从其他 JavaScript 文件调用函数的代码。我的尝试是使用
var m = require('./messages');
为了加载 messages.js
的内容(就像我在服务器端一样),然后从该文件调用函数。但是,require
未在客户端定义,它会引发 Uncaught ReferenceError: require is not defined
形式的错误。
这些其他 JavaScript 文件也在客户端运行时加载,因为我将链接放在网页的标题处。所以客户端知道从这些其他文件中导出的所有功能。
如何从打开服务器套接字的主 client.js
文件中的这些其他 JavaScript 文件(例如 messages.js
)调用这些函数?
<script src="messages.js"></script>
然后打电话给他们?
--require
选项导致在客户端定义 require()
可能会有所帮助。请参阅:lincolnloop.com/blog/speedy-browserifying-multiple-bundles
这是因为浏览器/客户端 JavaScript 中不存在 require()
。
现在,您将不得不对客户端 JavaScript 脚本管理做出一些选择。
你有三个选择:
使用
笔记!
在 your-script.js
中使用 require(['moudle-name'])
,而不是在 require('moudle-name')
使用 const {ipcRenderer} = require(['electron'])
,而不是const {ipcRenderer} = require('electron')
就我而言,我使用了另一种解决方案。
由于该项目不需要 CommonJS 并且它必须具有 ES3 兼容性(不支持模块),因此您只需从代码中删除所有导出和导入语句,因为您的 tsconfig 不包含
"module": "commonjs"
但是在您引用的文件中使用导入和导出语句
import { Utils } from "./utils"
export interface Actions {}
最终生成的代码将始终具有(至少对于 TypeScript 3.0)这样的行
"use strict";
exports.__esModule = true;
var utils_1 = require("./utils");
....
utils_1.Utils.doSomething();
即使使用它也行不通。我认为最好的解决方案是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();
window = new BrowserWindow({
webPreferences: {
nodeIntegration: true,
contextIsolation: false
}
});
我确定。我们必须补充:
webPreferences: {
nodeIntegration: true
}
例如:
mainWindow = new BrowserWindow({webPreferences: {
nodeIntegration: true
}});
对我来说,问题已经解决了。
人们在问什么是脚本标记方法。这里是:
<script src='./local.js'></script>.
或来自网络:
<script src='https://mycdn.com/myscript.js'></script>
您需要为您的脚本插入正确的 url。
我正在尝试使用 webpack 构建 metronic。在我的 package.json 中,我不得不删除 "type": "module" 部分。
https://i.stack.imgur.com/NIMd6.png