Electron:jQuery没有定义
问题:在使用Electron进行开发时,当您尝试使用任何需要jQuery的JS插件时,即使使用脚本标记加载正确的path,插件也不会findjQuery。
更好的更通用的解决schemeIMO:
<!-- 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)的问题,而不必指定每个库
- 脚本构build/包装友好(即Grunt / gulp所有脚本到vendor.js)
- 不要求
node-integration
是错误的
来源于此
如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
。
该解决scheme非常简单 ,而不是通过<script src="...">
加载jQuery,你应该像这样加载:
<script>window.$ = window.jQuery = require('./path/to/jquery');</script>
注意: path之前的点是必需的 ,因为它表示它是当前目录。 另外, 请记住加载之前加载任何其他插件依赖它的jQuery 。
另一种编写<script>window.$ = window.jQuery = require('./path/to/jquery');</script>
方法是: <script>window.$ = window.jQuery = require('./path/to/jquery');</script>
是:
<script src="./path/to/jquery" onload="window.$ = window.jQuery = module.exports;"></script>
电子FAQ答案:
http://electron.atom.io/docs/faq/
我不能在Electron中使用jQuery / RequireJS / Meteor / AngularJS。
由于Electron的Node.js集成,有一些额外的符号插入到DOM模块,导出,require中。 这导致一些图书馆的问题,因为他们想要插入相同名称的符号。
要解决这个问题,可以closuresElectron中的节点集成:
//在主stream程中
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>
您可以在BrowserWindow中将node-integration: false
放入选项中。
例如: window = new BrowserWindow({'node-integration': false});
刚刚遇到同样的问题
npm install jquery --save
<script>window.$ = window.jQuery = require('jquery');</script>
为我工作
我认为我理解你的斗争,我解决它有点不同。我使用脚本加载器为我的js文件,其中包括jquery.Script加载器采取您的js文件,并将其附加到vendor.js文件的顶部它为我做了魔术。
https://www.npmjs.com/package/script-loader
在安装脚本加载器之后,将其添加到引导或应用程序文件中。
import'script!path / your-file.js';
一个很好,干净的解决scheme
- 使用npm安装jQuery。 (
npm install jquery --save
) - 使用它:
<script> let $ = require("jquery") </script>
好的,这里有另一种select,如果你想要一个相对包括…
<script> window.$ = window.jQuery = require('./assets/scripts/jquery-3.2.1.min.js') </script>
<script> delete window.module; </script>
在你的jQuery导入之前,你很好去。 更多信息在这里 。