Подтвердить что ты не робот

Добавить пользовательские метаданные или config в package.json, действительно ли это?

Я видел (не помню, где) файл package.json с настраиваемыми ключами, начинающимися с подчеркивания:

{
    "name": "application-name"
  , "version": "0.0.1"
  , "private": true
  , "dependencies": {
      "express": "2.4.7"
    , "jade": ">= 0.0.1"
  }
  , "_random": true
}

Вам разрешено это делать? Это все еще актуально? Если это разрешено, есть ли какая-либо документация по правилам?

Спасибо!

4b9b3361

Ответ 1

TL;DR:

  • Да, вам разрешено добавлять пользовательские записи в package.json.
  • Выберите имя ключа:
    • не определено (подробнее см. ниже)
    • не зарезервировано для дальнейшего использования (подробности ниже)
    • избегать префиксов _ и $
    • и желательно использовать один ключевой уровень верхнего уровня, в котором будет вставлять ваши пользовательские записи.

Например, если у вас есть домен example.org, вы можете сохранить собственный random ключ, как показано ниже, внутри ключа верхнего уровня в нотации с обратным доменом с _, замененным на . и, если применимо, - (см. комментарии) (например, org_example):

{
    "name": "application-name"
  , "version": "0.0.1"
  , "private": true
  , "dependencies": {
      "express": "2.4.7"
    , "jade": ">= 0.0.1"
  }  
  , "org_example": {
      "random": true
  }
}

npm package.json формат файла в основном соответствует спецификации CommonJS:

Что касается выбора пользовательских ключей: спецификация пакета CommonJS, укажите (внимание мое):

Следующие строки зарезервированы для расширения будущего: build, default, email, external, files, imports, maintainer, paths, platform, require, summary, test, using, downloads, uid.

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

Для использования по своему усмотрению следующие поля зарезервированы для реестров пакетов: id, type. Все свойства, начинающиеся с _ или $, также зарезервированы для реестров пакетов для использования по своему усмотрению.

Ответ 2

Учитывая характер JSON и это утверждение из документации Nodejitsu, я не вижу в этом ничего плохого.

Сам NPM знает только два поля в package.json:

{
   "name" : "barebones",
   "version" : "0.0.0",
}

NPM также интересует пару полей, перечисленных здесь. До тех пор, пока он действителен JSON и не вмешивается в Node.js или NPM, все должно быть в порядке и актуально.

Node осведомленность о файлах package.json, похоже, распространяется на основное поле. Ссылка

 { "name" : "some-library",
   "main" : "./lib/some-library.js" }

Если это было в папке в. /some -library, тогда require ('./some-library') попытается загрузить. /some -library/lib/some-library.js.

Это степень Node осведомленности о файлах package.json.

Чтобы избежать возможных конфликтов, вы должны префиксать свои ключи каким-либо символом или словом. Подчеркиванием является общий вариант.