如何在 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 中“要求”外部模块?