如何在 Electron 中使用 node_modules?

Posted

技术标签:

【中文标题】如何在 Electron 中使用 node_modules?【英文标题】:How to use node_modules within Electron? 【发布时间】:2015-08-20 06:16:14 【问题描述】:

将 electron 与 Angular2、Typescript 和 Electron 结合使用我试图了解如何使用通过 npm 安装的节点模块包。 当前的问题是我必须指定模块的位置,例如var module = require('./node_modules/xyz/lib/xyz.js')。但是随后electron并没有找到xyz的依赖,它们位于./node_modules/xyz/node_modules/yyy内,并抱怨./yyy.js找不到。

电子应用结构

dist  
├── angular2.dev.js   
├── config.js  
├── index.html  
├── main.js  
├── node_modules  
├── package.json  
└── app.js  

【问题讨论】:

原来我用npm安装模块,但是我用Angular2 JSPM来加载模块。使用jspm install npm:xyz 安装模块时,我可以在电子中要求模块,例如 require('xyz') 。 我想我知道问题出在哪里,有人问过类似的问题,我认为this answer 可能会对您有所帮助! 【参考方案1】:

当前的问题是我必须指定模块的位置,例如 var module = require('./node_modules/xyz/lib/xyz.js')

你应该可以做到 var module = require('xyz'); 如果你有它位于你提到的相对路径 ./node_modules/ .... 中。

【讨论】:

【参考方案2】:

更新:

已询问过类似的question,my answer 很可能会在此处为您提供帮助:

如果您不将应用程序根目录下的应用程序node_modules 目录的路径附加到NODE_PATH 变量,它将无法工作。所以你需要做这样的事情:

export NODE_PATH=/PATH/TO/APP/node_modules
electron /PATH/TO/APP

在导出 NODE_PATH 时,请确保提供绝对路径。


如果当您 require 正常时电子无法找到模块,则表明您的 package.json 不包含模块作为依赖即使如果模块已经在您的 dist 目录下可用。

所以请确保您在 dist 目录中并使用

npm install --save xyz

注意 --save 标志!

【讨论】:

【参考方案3】:

如果您没有在 package.json 中包含这些模块,我发现将它们全部复制到您的版本中的 node_modules 是最简单的。类似于releases > ARCHITECTURE > resources > node_modules

【讨论】:

【参考方案4】:

根据 electron 的文档,将 nodeIntegration 首选项设置为 true。通过添加来做到这一点

webPreferences: 
  nodeIntegration: true

到您的createWindow() 函数。

【讨论】:

这不是你想的那样。节点集成意味着您在前端公开 Node.js,从而使您的应用程序特别容易受到攻击,并且安全。

以上是关于如何在 Electron 中使用 node_modules?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Electron 中使用 node_modules?

如何在 Electron 中使用 Typescript 脚本?

如何使用 TypeScript 在 Electron 中使用 remote.require()

您如何使用新的、安全的默认设置在 Electron 中“要求”外部模块?

如何在 Electron/Firebase 应用中支持 HTTP 协议

在 vue-electron 中,如何在父子组件之间绑定数据?