问题:在使用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>元素。你应该看到函数$没有定义或者类似的效果。


当前回答

对于这个问题,使用JQuery和其他js,就像你在Web Page中使用的一样。但是,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和其他东西在电子。

其他回答

如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代码“看到”它在CommonJS环境中运行,并忽略了window。

解决方案真的很简单,而不是通过<script src="…>,你应该这样加载:

<script>window.$ = window.jQuery = require('./path/to/jquery');</script>

注意:路径前的点是必需的,因为它表示它是当前目录。另外,请记住在加载依赖jQuery的任何其他插件之前加载jQuery。

你可以把node-integration: false放在BrowserWindow的选项里面。

例如:window = new BrowserWindow({'node-integration': false});

另一种书写<script>window的方式。$ = window。jQuery = require('./path/to/ jQuery ');</script>是:

<script src="./path/to/jquery" onload="window.$ = window.jQuery = module.exports;"></script>

我想我理解你的挣扎,只是解决方法有点不同。我使用脚本加载器为我的js文件,其中包括jquery。脚本加载器需要你的js文件,并将其附加到你的vendor.js文件的顶部,它为我做了魔法。

https://www.npmjs.com/package/script-loader

安装脚本加载程序后,将其添加到引导或应用程序文件中。

进口“脚本!路径/ your-file.js”;

在我看来,更好、更通用的解决方案是:

<!-- 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>

好处

适用于浏览器和电子具有相同的代码 修复了所有第三方库(不仅仅是jQuery)的问题,而无需指定每个库 脚本构建/打包友好(即Grunt / Gulp所有脚本到vendor.js) 不要求节点集成为假

源在这里