问题:在使用Electron进行开发时,当您尝试使用任何需要jQuery的JS插件时,即使使用脚本标记加载正确的路径,插件也找不到jQuery。
例如,
<body>
<p id="click-me">Click me!</p>
...
<script src="node_modules/jquery/dist/jquery.min.js"></script> //jQuery should be loaded now
<script>$("#click-me").click(() => {alert("Clicked")});</script>
</body>
运行上面的代码是行不通的。实际上,打开DevTools,转到Console视图,然后单击<p>
元素。您应该看到function $ is not defined
或其他相似的内容。
答案 0 :(得分:677)
更好,更通用的解决方案IMO:
<!-- Insert this line above script imports -->
<script>if (typeof module === 'object') {window.module = module; module = undefined;}</script>
<!-- normal script imports etc -->
<script src="scripts/jquery.min.js"></script>
<script src="scripts/vendor.js"></script>
<!-- Insert this line after script imports -->
<script>if (window.module) module = window.module;</script>
<强>优势强>
node-integration
为假来源here
答案 1 :(得分:113)
如https://github.com/atom/electron/issues/254所示,问题是由于此代码引起的:
if ( typeof module === "object" && typeof module.exports === "object" ) {
// set jQuery in `module`
} else {
// set jQuery in `window`
}
jQuery代码&#34;看到&#34;它在CommonJS环境中运行并忽略window
。
解决方案非常简单,而不是通过<script src="...">
加载jQuery,您应该像这样加载:
<script>window.$ = window.jQuery = require('./path/to/jquery');</script>
注意: 路径需要之前的点,因为它表明它是当前目录。此外,记得在加载任何其他依赖它的插件之前加载jQuery。
答案 2 :(得分:51)
电子常见问题答案:
我不能在Electron中使用jQuery / RequireJS / Meteor / AngularJS。
由于Electron的Node.js集成,还有一些额外的功能 插入DOM的符号,如module,exports,require。这个 导致某些库出现问题,因为他们想要插入 具有相同名称的符号。
要解决此问题,您可以在Electron:
中关闭节点集成//在主要过程中。
let win = new BrowserWindow({
webPreferences: {
nodeIntegration: false } });
但是如果你想保持使用Node.js和Electron的能力 API,您必须在包含之前重命名页面中的符号 其他图书馆:
<head>
<script>
window.nodeRequire = require;
delete window.require;
delete window.exports; delete window.module;
</script>
<script type="text/javascript" src="jquery.js"></script>
</head>
答案 3 :(得分:49)
撰写<script>window.$ = window.jQuery = require('./path/to/jquery');</script>
的另一种方式是:
<script src="./path/to/jquery" onload="window.$ = window.jQuery = module.exports;"></script>
答案 4 :(得分:28)
刚遇到同样的问题
npm install jquery --save
<script>window.$ = window.jQuery = require('jquery');</script>
为我工作
答案 5 :(得分:17)
您可以将node-integration: false
放在BrowserWindow的选项中。
例如:window = new BrowserWindow({'node-integration': false});
答案 6 :(得分:5)
<script>
delete window.module;
</script>
在你的jquery导入之前,你很高兴。 more info here
答案 7 :(得分:4)
我想我理解你的努力我解决了一点点不同。我使用脚本加载器为我的js文件,包括jquery.Script加载器获取你的js文件并将它附加到你的vendor.js文件顶部它做了魔术对我来说。
https://www.npmjs.com/package/script-loader
安装脚本加载程序后,将其添加到您的启动或应用程序文件中。
import&#39; script!path / your-file.js&#39;;
答案 8 :(得分:3)
好的,这是另一种选择,如果你想要一个亲戚包括......
<script> window.$ = window.jQuery = require('./assets/scripts/jquery-3.2.1.min.js') </script>
答案 9 :(得分:3)
我面临同样的问题,这对我有用!
使用 npm
安装jQuery$ npm install jquery
然后以下列方式之一包含jQuery。
使用脚本标签
<script>window.$ = window.jQuery = require('jquery');</script>
使用Babel
import $ from 'jquery';
使用Webpack
const $ = require('jquery');
答案 10 :(得分:2)
如果您使用的是Angular2,可以使用以下代码创建一个新的js文件:
// jquery-electron.js
if ((!window.jQuery || !window.$) && (!!module && !!module.exports)) {
window.jQuery = window.$ = module.exports;
}
并将其放在jquery路径之后,位于.angular-cli.json:
"scripts": [
"../node_modules/jquery/dist/jquery.js",
"assets/js/jquery-electron.js",
...
...
]
答案 11 :(得分:2)
im建筑和带电子的Angular App,我的解决方法是:
index.html
<script>
if ( typeof module === "object" && typeof module.exports === "object" ) {
window.$ = window.jQuery = require('jquery');
}
</script>
angular.json
"scripts": [
"node_modules/jquery/dist/jquery.min.js",
"node_modules/popper.js/dist/umd/popper.min.js",
"node_modules/bootstrap/dist/js/bootstrap.min.js"
]
因此,如果在浏览器上,则从angular.json加载Jquery,否则,如果它是电子构建的应用,则需要模块。
如果要在index.html中导入jquery而不是从angular.json导入,请使用以下解决方案:
<script src="path/to/jquery"></script>
<script>
if ( typeof module === "object" && typeof module.exports === "object" ) {
window.$ = window.jQuery = require('jquery');
}
</script>
答案 12 :(得分:2)
使用以下代码为我工作
var $ = require('jquery')
答案 13 :(得分:1)
1。使用npm安装jQuery。
npm install jquery --save
2。
<!--firstly try to load jquery as browser-->
<script src="./jquery-3.3.1.min.js"></script>
<!--if first not work. load using require()-->
<script>
if (typeof jQuery == "undefined"){window.$ = window.jQuery = require('jquery');}
</script>
答案 14 :(得分:1)
这对我有用。
<script languange="JavaScript">
if (typeof module === 'object') {window.module = module; module = undefined;}
</script>
注意事项:
1)将其放在</head>
之前的部分
2)在</body>
标记之前添加Jquery.min.js或Jquery.js
答案 15 :(得分:0)
您可以尝试以下代码:
mainWindow = new BrowserWindow({
webPreferences: {
nodeIntegration:false,
}
});
答案 16 :(得分:0)
对于此问题,请使用JQuery和其他与Web页中相同的js。但是,Electron具有节点集成功能,因此无法找到您的js对象。您必须设置module = undefined
直到正确加载js对象。参见下面的示例
<!-- Insert this line above local script tags -->
<script>if (typeof module === 'object') {window.module = module; module =
undefined;}</script>
<!-- normal script imports etc -->
<script
src="https://code.jquery.com/jquery-3.4.1.min.js"
integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo="
crossorigin="anonymous"></script>
<!-- Insert this line after script tags -->
<script>if (window.module) module = window.module;</script>
像给定的那样导入后,您将可以在电子中使用JQuery
和其他东西。
答案 17 :(得分:0)
只需使用以下命令安装Jquery。
npm install --save jquery
然后,将belew行放在要使用Jquery的js文件中
let $ = require('jquery')