当前位置: 首页 > 知识库问答 >
问题:

在电子应用程序中使用要求(lib)与

华星驰
2023-03-14

我不知道何时使用需要('jslb')

<script>window.$ = window.jQuery = require('./js/jquery-2.2.4.min.js');</script>

我需要开始使用一些其他库(例如Handlebar、ds3.js、Bootstrap等),我不确定是否应该使用


共有2个答案

鄂曦之
2023-03-14

在模块绑定器之前,必须通过

现在,更容易的方法是假设一个公共JS环境,并通过一个模块捆绑器获取所有内容,该模块捆绑器将在浏览器上下文中为您公开一个要求函数。

所有这些在电子应用程序的上下文中都是不必要的:

在普通浏览器中,网页通常在沙盒环境中运行,不允许访问本机资源。然而,电子用户有权使用节点。网页中的js API允许较低级别的操作系统交互。

比照渲染过程

这意味着本机节点。jsrequire功能(以及其他功能)在渲染器进程中可用!

下面是一个简单的电子应用程序来证明这一点:

我的package.json

{
  "name": "foobar",
  "version": "1.0.0",
  "main": "main.js",
  "scripts": {
    "start": "electron ."
  },
  "devDependencies": {
    "electron": "^3.0.7"
  },
  "dependencies": {
    "the-answer": "^1.0.0"
  }
}

我的main。js:(主流程)

const {app, BrowserWindow} = require('electron');

let mainWindow;

function createWindow () {
  mainWindow = new BrowserWindow({width: 800, height: 600})
  mainWindow.loadFile('index.html');
}

app.on('ready', createWindow);

我的索引。html:(渲染器进程)

<!DOCTYPE html>
<html>
  <body>
    <script>
      const os = require('os'); // Standard Node.js module
      const answer= require('the-answer'); // An NPM package that returns the answer to everything.
    </script>
    <button onclick="alert(os.platform())">YOUR PLATFORM</button>
    <button onclick="alert(answer)">THE ANSWER</button>
  </body>
</html>

那么你应该使用哪种方法呢?

电子暴露了本机Node.js需要函数。如果不利用这一点,那将是一种耻辱:您将能够按名称要求包,并将代码拆分为可重用的模块,就像您在任何ode.js应用程序中所做的那样。

高寒
2023-03-14

有些库仅通过CommonJS接口公开其变量。其他变量,如jQuery,也将它们作为全局变量公开。

你不能只做

与CommonJS绑定

module.exports = myLibrary;

与全局范围的绑定

window.myLibrary = myLibrary;

如果一个库只做前者,那么如果不使用需要,您将无法访问该值。如果一个库只做后者,那么你将无法访问它与要求的意义上的const myLibrary=要求('my-库')

一般来说,最好在全局变量上使用CommonJS。将变量添加到全局范围可能会导致名称冲突,直接加载依赖项会使下一个人更容易知道依赖项来自何处。更不用说,CommonJS允许静态分析工具更好地工作,因此您更有可能获得相关的代码完成和类型定义。

以jQuery为例,最好像这样使用它。

// main.js
const $ = require('./js/jquery-2.2.4.min.js');
// could also be done like this if you install it as a Node dependency
// const $ = require('jquery');

$(document).ready(...);
<!-- index.html -->
...
<script src="main.js"></script>

TL; DR

如果可能,请使用require('my-library'),如果不需要,请将它们作为全局文件加载。

 类似资料:
  • 问题内容: 在最新版本(v0.31.0)中,电子附带了静态链接的FFMpeg库(不是命令行工具,请参见#2588) 我知道很多用于ffmpeg的nodejs模块,但是它们看起来都像是命令行工具的api,那么理想情况下我该如何访问与电子捆绑在一起的ffmpeg库并编码流? 问题答案: 当前这是不可能的,因为没有针对Node.js的不错的库。意思是,只有这样抽象了CLI。但是,可以将其编译和链接为节点

  • 我试图在一个电子应用程序中实现基本的JavaScript代码示例。我已经成功地创建了我的项目,并在Google控制台中添加了一个API密钥凭证。 然而,当我尝试将基本样本放入电子应用程序时,我得到了以下错误: 拒绝在帧中显示https://accounts.google.com/o/oauth2/auth?client_id=...,因为它将X-Frame-Options设置为SAMEORIGIN

  • 我正在尝试构建一个电子应用程序。我想从另一个js文件导入一些函数。但是当使用导入时,我得到错误显示 无法在模块外部使用import语句为什么会发生这种情况 我的代码是eventsource。js 事件处理程序。js 原型html

  • 我目前正在为一个即将到来的项目评估电子。也许我的问题对于使用电子的人来说是微不足道的。然而,我在留档中找不到答案,或者可能没有完全掌握这个概念。 我想有一个网络应用,用户可以通过浏览器访问,如果他们选择或从本机应用,如果他们想使用USB设备(在本例中,是信用卡阅读器)连接到他们的电脑。因此,主。js文件会像这样打开远程web应用程序 能够访问本地资源有什么区别吗(文件、端口等,如果页面是远程的还是

  • 我已经在Heroku上成功部署了Spring Boot应用程序。此应用程序应在用户填写表单后发送电子邮件。 问题是,在本地它可以工作,但在Heroku,该应用程序总是抛出AuthenticationFailedException,因为它正试图从Heroku在另一个国家的服务器使用我的Gmail帐户登录。 我的Gmail帐户没有双因素身份验证,并且启用了不太安全的应用程序选项。 我如何解决这个问题?

  • 问题是,就应用程序生命周期处理和易于使用而言,这种体系结构是否可以被认为是安全的? Update:每次创建新的活动并希望获得数据时,它可以获得ApplicationContext的BehaviorSubject,然后订阅它,Subject将发出最后发出的值;我为什么要这样做?例如。假设你有新闻项目,你获取了新闻提要,你想启动后台任务来获取新闻项目的全部内容,在这种情况下,我可以在你滚动新闻列表时开