Электронные модули требуют: из-за различий в рабочем каталоге, в то время как время выполнения intellisense не работает - PullRequest
0 голосов
/ 09 ноября 2018

Я пишу электронное приложение с vs-кодом. Сначала у меня были некоторые проблемы с требованием локальных файлов в качестве модулей, но мне удалось их исправить. Единственная проблема сейчас в том, что я потерял intellisens для этих локальных модулей.

Структура проекта:

+---app
|   |   config.json
|   |   index.html
|   |
|   +---css
|   |       style.css
|   |
|   +---js
|           config.js
|           render.js
|
|   main.js
|   package.json
|   README.md

Моя цель: использовать методы из config.js в render.js.

К настоящему времени я понимаю, почему vs-код ведет себя так, как он, но я не вижу никакого решения: когда приложение работает, текущая рабочая директория (__dirname) равна ./app, поэтому я должен требовать config.js- файл более require(./js/config). Недостатком является то, что я теряю полную интеллигентность для этого модуля.

При разработке и открытии файла render.js текущим каталогом с точки зрения vs-code является ./app/js, поэтому относительный путь к моему модулю ./config.js. Теперь у меня снова будет intellisense, но приложение больше не работает: require(./config) Результат error: cannot find module

Есть ли способ запустить приложение, и я получаю intellisense в vs-коде? Я благодарен за любую помощь, которую я могу получить.

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Как вы обнаружили; проблема в том, что vscode и приложение не используют одну и ту же отправную точку.
Вот что я сделал, чтобы заставить его работать:

Иерархия:

+---assets
|   |
|   +---js
|       |    index.js
|       |    other.js
|   
|   main.js
|   index.html
|   renderer.js

В index.html Я загружаю renderer.js так:

<script type="text/javascript">
    require("./renderer");
</script>

Таким образом, и приложение, и vscode используют корневую папку в качестве отправной точки.
И в renderer.js это все, что у меня есть:

require('./assets/js/index');

Это позволяет мне требовать other.js в index.js с рабочим intellisense.
index.js :

const Other= require('./other').default;
...

И, наконец, other.js :

class Other{
    ...
}
module.exports.default = Other;
0 голосов
/ 09 ноября 2018

Я обнаружил проблему .. Я ссылался на render.js в файле index.html. Если я загружаю его с require(./app/js/render) в файле app.js, все работает нормально, включая intellisens.

...