Избегайте публикации секретов в реестре npm
Объяснение в один абзац
Следует принять меры предосторожности, чтобы избежать риска случайной публикации секретов в публичных реестрах npm. Файл .npmignore
может использоваться для внесения в черный список определенных файлов или папок, или массив files
в package.json
может выступать в качестве белого списка.
Чтобы получить представление о том, что npm publish действительно будет публиковать в реестре, можно добавить флаг --dry-run
, добавив команду npm publish, чтобы обеспечить подробное представление созданного пакета tarbell.
Важно отметить, что если в проекте используются файлы .npmignore
и .gitignore
, все, чего нет в .npmignore
, публикуется в реестре (то есть файл .npmignore
переопределяет . gitignore
). Это условие является распространенным источником путаницы и является проблемой, которая может привести к утечке секретов. Разработчики могут в конечном итоге обновить файл .gitignore
, но не забудьте также обновить .npmignore
, иначе это может привести к тому, что потенциально конфиденциальный файл не будет передан в систему контроля версий, но все же будет включен в пакет npm.
Пример кода
Example .npmignore file
# Tests
test
coverage
# Build tools
.travis.yml
.jenkins.yml
# Environment
.env
.config
Пример использования массива файлов в package.json
{
"files" : [
"dist/moment.js",
"dist/moment.min.js"
]
}
Что говорят другие блогеры
Из блога Liran Tal & Juan Picado at Snyk:
... Еще одна полезная практика - использование свойства files в package.json, который работает в качестве белого списка и определяет массив файлов, которые должны быть включены в пакет, который должен быть создан и установлен (в то время как файл игнорирования функционирует как черный список). Свойство files и файл ignore можно использовать вместе, чтобы определить, какие файлы должны быть явно включены, а также исключены из пакета. При использовании обоих, первое свойство files в package.json имеет приоритет над файлом игнорирования.
Из npm блога
... Когда вы запускаете npm publish, npm объединяет все файлы в текущем каталоге. Он принимает несколько решений о том, что включать и что игнорировать. Чтобы принять эти решения, он использует содержимое нескольких файлов в каталоге вашего проекта. Эти файлы включают в себя .gitignore, .npmignore и массив файлов в пакете.json. Он также всегда включает определенные файлы и игнорирует другие.