2015-06-17 2 views
3

У меня есть следующая структура проекта:IntelliJ/WebStorm не найти ссылку на импорт

  • корень
    • ГКЗ
      • скрипты
        • main.js
        • foo.js

Внутри моего main.js файла, я импортировать foo.js так:

import 'src/scripts/foo.js' 

Когда я нажимаю на утверждение импорта выше и перейти к Navigate -> Declaration я получаю супер полезное сообщение, которое сообщает Cannot find declaration to go.

Это заставляет работать с большим разочарованием, потому что редактор в принципе понятия не имеет, какие файлы импортируют другие файлы. Это означает, что я не могу использовать полезные особенности IDE, как поиска ссылок при перемещении файла, найти использования, и т.д.

Если изменить оператор импорта, чтобы быть относительными, он работает в целом:

import './foo.js' 

Однако мы стремимся к абсолютному импорту, a habit we picked up from writing python apps.

Я наткнулся на Webstorm: "Cannot Resolve Directory", и это дало мне идею mark мой src каталог как Sources Root. После того, как сделать это, я мог бы изменить мое заявление импорта в main.js к

import '/scripts/foo.js' //notice the leading forward slash 

Ну, это немного лучше, потому что теперь я могу по крайней мере Navigate -> Declaration, но это не идеально, потому что теперь я не могу отметить какой-либо из каталогов под src как тест, ресурс и т. д.

Так почему же IntelliJ/webstorm так сложно делать?

+1

Относительные пути - это стандарт дезактома сообщества JS, с предлагаемым форматом, который означает 'scripts/foo.js' внутри модуля с именем' src'. Как вы будете ссылаться на внешние модули в предложенном вами стиле? Для меня это похоже на хороший пример того, что отклонение от стандартов просто требует проблем с минимальными преимуществами. – loganfsmyth

+0

Это справедливая точка зрения, и я думаю, что не знал/рассматривал формат, который я использовал, отклоненный от канонического способа импорта. Я немного задумался о github, и вы правы, большинство людей используют относительные пути. Я верю, что ответ заключается в том, чтобы отойти от абсолютных путей. Если вы дадите ответ ниже, я соглашусь с ним. –

ответ

0

Я бы очень предложил использовать этот стиль импорта в JavaScript-коде. В то время как потенциально работоспособные относительные пути являются стандартом defacto во всем коде NodeJS и распространяются по существу на все JS-коды, которые используют системы модулей.

В существующих системах любой путь, начинающийся с ., является относительным, любой путь, начинающийся с /, является абсолютным, и любой другой путь разрешен к модулю. По этой логике import 'src/scripts/foo.js' будет анализироваться как ./scripts/foo.js относительно модуля зависимости, называемого src.

Обратите внимание, что расширение файла является необязательным и обычно отключено.

Если вы хотите использовать этот стиль, и ваш загрузчик модулей поддерживает его, вы, конечно, можете это сделать, но я хочу подчеркнуть, что вы, вероятно, причиняете боль себе, используя нестандартный подход.

+2

Путь может относиться к '$ NODE_PATH' (делая оператор импорта переносимым). – jcalfee314

+0

@loganfsmyth Я понимаю, почему вы выступаете против этого, поскольку, когда вам нужно слишком много относительных путей, это указывает на то, что что-то может быть абстрагировано в модуле. Но я не хочу модули, потому что они приносят нежелательную сложность. Тогда что мне делать? – froginvasion

2

Потому что теперь я не могу пометить любой из каталогов под ним ЦСИ как тест, ресурс и т.д.

Да, вы можете. Невозможно отметить подпапки уже отмеченных папок в представлении проекта. Но вы можете сделать это в Project Structure (Ctrl + Сдвиг + Alt + S). Перейдите на страницу Modules, выберите свой модуль и перейдите на вкладку Sources. Теперь вы можете пометить свою папку src как Sources (которую вы уже сделали) и пометить src/test как Tests и т. Д.

В соответствии с Web Help, в WebStorm этот параметр скрыт в Settings > Directories вместо структуры проекта.

Вот еще одно решение, использующее только представление проекта: снимите отметку с исходной папки, пометьте свои подкаталоги test/resource и затем снова пометьте родительскую папку. Я не уверен, почему это не работает наоборот.

+0

Да, я видел ссылки на вкладку 'sources', но [я думаю, что мне это не хватает?] (Http://i.imgur.com/lRnh5hF.png) –

+0

Я обновил свой ответ двумя другие решения –

+0

Ничего себе, странно. Теперь мне удалось открыть вкладку «Источники» в окне моей структуры проекта. Мне пришлось в основном удалить мой корневой модуль (Project Structure -> Modules) и повторно добавить его. –

Смежные вопросы