У меня есть простой файл package.json, и я хочу добавить комментарий. Есть ли способ сделать это, или есть какие-нибудь хаки, чтобы сделать эту работу?
{
"name": "My Project",
"version": "0.0.1",
"private": true,
"dependencies": {
"express": "3.x",
"mongoose": "3.x"
},
"devDependencies" : {
"should": "*"
/* "mocha": "*" not needed as should be globally installed */
}
}
Приведенный выше пример комментария не работает как разрывы npm. Я также попробовал // стиль комментариев.
package.json
файлам, иpackage.json
в списке рассылки NodeJS есть конкретный ответ.package.json
. Пожалуйста, прокомментируйте этот вопрос - может быть, мы покажем, насколько полезными могут быть комментарии.Ответы:
Это недавно обсуждалась в Node.js списке рассылки .
По словам Исаака Шлютера, который создал npm:
При использовании ваших обычных инструментов (npm, yarn и т. Д.) Будут удалены несколько ключей "//". Это выживает:
Это не выживет
источник
{ "//": "first", "//": "second"}
позволяет вам использоватьnpm version
и другие утилиты командной строки, которые обычно повторно анализируют весь JSON и отбрасывают дублирующиеся ключи в процессе.package.json
объекта. Например{ "dependencies": { "//": "comment?" }}
, недействителен, но{ "//": "comment!", "dependencies":{}}
действителен."//"
ключ и его значение в конечном итоге стираются. Есть ли способ иметь постоянные комментарии?Вот еще один хак для добавления комментариев в JSON. Поскольку:
Эквивалентно
Вы можете сделать что-то вроде:
источник
"express": "makes routing better so I don't want to gouge my eyes out", "express": "3.x"
, Так что да, «гадость», как говорит ColinE, а также «спасибо», как говорит ColinE.package.json
программным способом, скажем, путемnpm version 1.2.3
повышения версии - избыточные записи будут удалены из результирующего JSON.Потратив час на сложные и хакерские решения, я нашел простое и правильное решение для комментирования моего громоздкого раздела зависимостей
package.json
. Именно так:Когда отсортировано таким же образом, теперь мне очень легко отслеживать эти пары зависимостей / комментариев либо в git commit diffs, либо в редакторе при работе с
package.json
.И никаких дополнительных инструментов, только простой и действительный JSON.
Надеюсь, это кому-нибудь поможет.
источник
"scripts": { "postinstall": "echo postinstall stuff goes here", "help-postinstall": "echo helpful stuff goes here" }
Много интересных идей.
То, что я делал, это:
Таким образом, я могу как прочитать «псевдо-комментарии» в самом скрипте, так и выполнить что-то вроде следующего, чтобы увидеть некоторую помощь в терминале:
Мои 2цента за это обсуждение :)
источник
NPS (Node Package Scripts) решил эту проблему для меня. Позволяет поместить ваши сценарии NPM в отдельный файл JS, куда вы можете добавить множество комментариев и любую другую логику JS, которая вам нужна. https://www.npmjs.com/package/nps
Образец
package-scripts.js
из одного из моих проектовЯ только что сделал локальную установку
npm install nps -save-dev
и вставил это в моиpackage.json
скрипты.источник
Вы всегда можете злоупотреблять тем, что дублированные ключи перезаписываются. Это то, что я только что написал:
Однако неясно, разрешает ли JSON дублировать ключи (см. Синтаксис JSON позволяет дублировать ключи в объекте? Кажется, он работает с npm, поэтому я рискну.
Рекомендуется использовать
"//"
ключи (из списка рассылки nodejs ). Когда я тестировал его, он не работал с разделами «зависимости». Кроме того, пример в посте использует несколько"//"
ключей, что означает, что npm не отклоняет файлы JSON с дублированными ключами. Другими словами, взломать выше всегда должно быть хорошо.Обновление: один досадный недостаток хакера дублированного ключа состоит в том, что
npm install --save
удаляет все дубликаты. К сожалению, это очень легко пропустить, и ваши комментарии из лучших побуждений пропали."//"
Хак по- прежнему является самым безопасным , как это кажется. Однако многострочные комментарии также будут удаленыnpm install --save
.источник
"//"
Хак не работает внутри devDependencies. NPM пытается определить путь UNC.mocha
атрибут. Просто он может добавить более одного и будет использоваться npm в конце.У меня есть забавная идея взломать.
Например, создайте имя пакета npm в качестве разделителя комментариев
dependencies
иdevDependencies
заблокируйте его в package.json.x----x----x
ПРИМЕЧАНИЕ : необходимо добавить разделительную строку последнего комментария с верной версией, как
*
в блоке.источник
npm install
(используя npm 5), мои дубликаты ключей были автоматически удалены :(Вдохновленный этой темой, вот что мы используем :
источник
Пока что большинство "хаков" здесь предлагают злоупотреблять JSON. Но почему бы не злоупотреблять основным языком сценариев?
Редактировать Первоначальный ответ помещал описание справа, используя его
# add comments here
для переноса; однако это не работает в Windows, поскольку флаги (например, npm run myframework - --myframework-flags) будут игнорироваться. Я изменил свой ответ, чтобы он работал на всех платформах, и добавил несколько отступов для удобства чтения.Это будет:
npm run myframework -- --help
npm run
(которая является фактической командой, запускаемой для получения информации о доступных сценариях)package.json
(используяless
или вашу любимую IDE)источник
&&
вместо;
этого первая команда становится:"help": "echo 'Display help information (this screen)' && npm run",
scripts
разделе.package.json
это много других вещей.Вот мой взгляд на комментарии в
package.json
/bower.json
:У меня
package.json.js
есть сценарий, который экспортирует фактическийpackage.json
. Запущенный скрипт перезаписывает старыйpackage.json
и сообщает мне, какие изменения он внес, идеально подходит, чтобы помочь вам отслеживатьnpm
сделанные автоматические изменения . Таким образом, я даже могу программно определить, какие пакеты я хочу использовать.Последнее задание находится здесь: https://gist.github.com/MarZab/72fa6b85bc9e71de5991
источник
npm install --save
или--save-dev
?Я закончил с
scripts
таким:Мое намерение здесь состоит не в том, чтобы уточнить одну строку, просто чтобы иметь какие-то разделители между моими сценариями для backend, frontend, all и т. Д.
Я не большой поклонник 1a, 1b, 1c, 2a, ... но ключи разные, и у меня вообще нет таких проблем.
источник
Как объясняется в этом ответе ,
//
ключ был зарезервирован, поэтому его можно использовать условно для комментариев. Проблема с//
комментарием, что она не может быть использована вdependencies
и вdevDependencies
качестве регулярной зависимости со строкой в качестве версии ограничения:вызывает ошибку,
Хотя ключи с нестроковыми значениями считаются недействительными зависимостями и эффективно игнорируются:
Сама зависимость может быть закомментирована таким же образом:
Поскольку зависимости сортируются, когда package.json изменяется NPM, нецелесообразно размещать комментарий над зависимостью, на которую он ссылается:
Ключ комментария должен быть назван соответствующим образом, если он относится к конкретной строке, поэтому он не будет перемещен:
Комментарий, который применим к конкретной зависимости, может быть добавлен как часть semver:
Обратите внимание, что если первая часть
OR
не совпадает, комментарий может быть проанализирован, например1.x
.Эти обходные пути совместимы со всеми текущими версиями NPM (6 и ниже).
источник
Поскольку большинство разработчиков знакомы с документацией на основе тегов / аннотаций, соглашение, которое я начал использовать, аналогично. Вот вкус:
Примечание: Для
dependencies
,devDependencies
и т.д секций, комментарий аннотации не могут быть добавлены непосредственно над отдельными зависимостях пакетов внутри объекта конфигурации , так какnpm
ожидает , что ключ быть имя пакета НМП. Отсюда и причина@comment dependencies
.Примечание. В определенных контекстах, например, в объекте scripts, некоторые редакторы / IDE могут жаловаться на массив. В контексте сценариев VS Code ожидает строку для значения, а не массив.
Мне нравится способ добавления комментариев к JSON в стиле аннотаций / тегов, потому что
@
символ выделяется из обычных объявлений.источник
Подводя итог всем этим ответам:
Добавьте одно поле верхнего уровня с именем
//
, содержащее строку комментария. Это работает, но это отстой, потому что вы не можете размещать комментарии рядом с тем, что они комментируют.Добавьте несколько полей верхнего уровня, начиная с
//
, например,//dependencies
которые содержат строку комментария. Это лучше, но это все еще позволяет вам делать комментарии верхнего уровня. Вы не можете комментировать отдельные зависимости.Добавьте
echo
команды к вашемуscripts
. Это работает, но это отстой, потому что вы можете использовать его только вscripts
.Эти решения также не очень читабельны. Они добавляют тонну визуального шума, и IDE не будут синтаксически выделять их как комментарии.
Я думаю, что единственным разумным решением является создание
package.json
из другого файла. Самый простой способ - написать свой JSON как Javascript и использовать Node для его записиpackage.json
. Сохраните этот файл какpackage.json.mjs
,chmod +x
он, а затем вы можете просто запустить его, чтобы создать свойpackage.json
.Он использует
//
ключ, чтобы предупредить людей от его редактирования.\x40generated
намеренно Он превращается@generated
вpackage.json
и означает, что некоторые системы проверки кода по умолчанию свернут этот файл.Это дополнительный шаг в вашей системе сборки, но он превосходит все остальные хаки здесь.
источник
Поскольку дублирующие ключи комментариев удаляются с помощью инструментов package.json (npm, yarn и т. Д.), Я пришел к использованию хэшированной версии, которая позволяет лучше читать как несколько строк, так и ключи
который является «допустимым» в соответствии с моей IDE в качестве корневого ключа, но внутри
dependencies
него жалуется на ожидание строкового значения.источник
//
ключ везде, это не очень хорошая замена для комментариев, особенно когда комментарии могут иметь хорошую подсветку синтаксиса с редактором и т. д.Еще один взлом. Я создал скрипт для чтения
package.json
в качестве контекста для шаблона руля.Код ниже на случай, если кто-то найдет этот подход полезным:
файл шаблона руля
package-json-comments.hbs
источник
Для npm package.json нашли 2 способа (после прочтения этого разговора):
Но при обновлении или переустановке пакета с помощью "--save" или "--save-dev, оставьте комментарий" ^ 4.1.0! Комментарий "в соответствующем месте будет удален. И все это будет нарушать аудит npm.
источник
del-comment
иenvify-comment
?Мой взгляд на разочарование без комментариев в JSON. Я создаю новые узлы, названные для узлов, на которые они ссылаются, но с префиксом подчеркивания. Это несовершенно, но функционально.
источник
start_comment
было бы лучше, потому что тогда он будет упорядочен по алфавиту