Как использовать node_modules в Electron?

Используя электрон в сочетании с Angular2, Typescript и Electron, я пытаюсь выяснить, как использовать пакет модуля узла, установленный через npm. Текущая проблема заключается в том, что я должен указать местоположение модуля, например var module = require('./node_modules/xyz/lib/xyz.js'). Но тогда электрон не находит зависимости 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  

person chrisber    schedule 05.06.2015    source источник
comment
Оказывается, я использовал npm для установки модулей, но я использовал JSPM с Angular2 для загрузки модулей. при установке модулей с помощью jspm install npm:xyz я могу потребовать модули в электронном виде, например require('xyz') .   -  person chrisber    schedule 06.06.2015
comment
Я думаю, что знаю, в чем проблема, аналогичный вопрос задавался, и я думаю, что этот ответ может вам помочь!   -  person Yan Foto    schedule 03.09.2015


Ответы (4)


ОБНОВЛЕНИЕ:

Аналогичный вопрос был задан и мой ответ, скорее всего, поможет вам здесь:

Если вы не добавите путь к каталогу вашего приложения 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!

person Yan Foto    schedule 28.07.2015

Текущая проблема заключается в том, что мне нужно указать расположение модуля, например var module = require('./node_modules/xyz/lib/xyz.js')

Вы должны быть в состоянии сделать var module = require('xyz');, если он находится по указанному вами относительному пути ./node_modules/ .....

person basarat    schedule 09.06.2015

Если вы не включили модули в свой package.json, мне было проще просто скопировать их все в node_modules в вашем выпуске. Это что-то вроде releases > ARCHITECTURE > resources > node_modules

person Harry Merzin    schedule 13.02.2017

Согласно документам электрона, установите для параметра nodeIntegration значение true. Сделайте это, добавив

webPreferences: {
  nodeIntegration: true
}

к вашей функции createWindow().

person Velocity    schedule 01.03.2021