Что означает «@» в require () в nodeJs? [Дубликат]

36
задан Derek Janni 29 March 2016 в 20:39
поделиться

4 ответа

Итак, я решил это сам.

Оказывается @company/config - это один из наших частных репозиториев NPM, размещенный на npm и определенный этим псевдонимом для внутреннего репозитория GitHub: он не имеет ничего общего с как работает require.

Использование @ может быть или не быть протоколом, который я не знал о частных репозиториях NPM, помните об этом, если вы столкнетесь с этим.

8
ответ дан Derek Janni 15 August 2018 в 17:43
поделиться

Помимо пакетов с областью действия, «@» может возникнуть из-за пакета модулей с псевдонимом в npm. С помощью модульного сглаживания вы можете использовать часто используемые модули, не требуя полного пути. Также он эффективен, когда структура каталогов длинна. например, require('../../../../some/very/deep/module')

Вместо этого вы можете использовать: var module = require('@deep/module')

В пакете.json вы можете предоставить модули, для которых вы предоставляете псевдоним:

"_moduleAliases": {
  "@root"      : ".", // Application's root
  "@deep"      : "src/some/very/deep/directory/or/file",
  "@my_module" : "lib/some-file.js",
  "something"  : "src/foo", // Or without @. Actually, it could be any string
}

И в главном файле приложения используйте это:

require('module-alias/register');

Подробнее см. здесь: module-alias

0
ответ дан Pransh Tiwari 15 August 2018 в 17:43
поделиться

Когда вы вызываете require(), он читает маршрут. Поскольку, кажется, нет проблем, если вы назовете папку как @company, вы можете потребовать что-то с помощью @.

Возможно, ваш коллега хотел оставить @company/config.js для себя, потому что конфигурации обычно являются персональными и не могут быть одинаковыми для другого пользователя.

require вызовет файлы внутри вашей папки проекта с подробной информацией:

  • Если вы вызываете файлы внутри папок проекта, вы должны добавить ./ перед своим маршрут.
  • Если вы вызываете любой глобальный пакет, такой как http или любые npm модули (которые установлены на node_modules), вы можете опустить ./.

Я создал маршрут @company/config внутри папки тестового проекта. Это позволило мне потребовать его с помощью ./@company/config. Только когда я переместил папку внутри node_modules, это позволило мне require('@company/config');.

Я бы не рекомендовал размещать какой-либо модуль внутри node_modules, это просто «контейнер» для пакетов npm. Попробуйте создать новый файл конфигурации и изменить требуемый маршрут или просто удалить запрос и создать объект конфигурации в вашем основном файле.

2
ответ дан user5402942 15 August 2018 в 17:43
поделиться
  • 1
    Спасибо! Это хороший ответ с некоторыми полезными, но я фактически решил свою собственную проблему некоторое время назад. Я отправлю его для ответа на другие вопросы. – Derek Janni 14 April 2016 в 23:32

В пакетах с ограниченными возможностями в npm предшествует символ «@»: https://docs.npmjs.com/misc/scope

Документы включают дополнительную информацию о требовании https://docs.npmjs.com/misc/scope#requiring-scoped-packages

Требуется пакетная область

Поскольку пакеты с областью действия устанавливаются в папку области видимости, вы должны включать имя области, когда они требуются в вашем коде, например

require('@myorg/mypackage')

Нет ничего особенного в том, как Node обрабатывает области папок, это просто указав, что требуется модуль mypackage в папке с именем @myorg.

20
ответ дан vaer-k 15 August 2018 в 17:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: