Итак, я решил это сам.
Оказывается @company/config
- это один из наших частных репозиториев NPM, размещенный на npm и определенный этим псевдонимом для внутреннего репозитория GitHub: он не имеет ничего общего с как работает require
.
Использование @
может быть или не быть протоколом, который я не знал о частных репозиториях NPM, помните об этом, если вы столкнетесь с этим.
Помимо пакетов с областью действия, «@» может возникнуть из-за пакета модулей с псевдонимом в 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
Когда вы вызываете require()
, он читает маршрут. Поскольку, кажется, нет проблем, если вы назовете папку как @company
, вы можете потребовать что-то с помощью @
.
Возможно, ваш коллега хотел оставить @company/config.js
для себя, потому что конфигурации обычно являются персональными и не могут быть одинаковыми для другого пользователя.
require
вызовет файлы внутри вашей папки проекта с подробной информацией:
./
перед своим маршрут. http
или любые npm
модули (которые установлены на node_modules
), вы можете опустить ./
. Я создал маршрут @company/config
внутри папки тестового проекта. Это позволило мне потребовать его с помощью ./@company/config
. Только когда я переместил папку внутри node_modules
, это позволило мне require('@company/config');
.
Я бы не рекомендовал размещать какой-либо модуль внутри node_modules
, это просто «контейнер» для пакетов npm
. Попробуйте создать новый файл конфигурации и изменить требуемый маршрут или просто удалить запрос и создать объект конфигурации в вашем основном файле.
В пакетах с ограниченными возможностями в npm предшествует символ «@»: https://docs.npmjs.com/misc/scope
Документы включают дополнительную информацию о требовании https://docs.npmjs.com/misc/scope#requiring-scoped-packages
Требуется пакетная область
Поскольку пакеты с областью действия устанавливаются в папку области видимости, вы должны включать имя области, когда они требуются в вашем коде, например
require('@myorg/mypackage')
Нет ничего особенного в том, как Node обрабатывает области папок, это просто указав, что требуется модуль mypackage в папке с именем @myorg.