2016-11-24 5 views
13

Если в package.json имеет files опору, и/или directories проп:Как вы используете свойства «файлы» и «каталоги» в package.json?

"files": [ 
    "./src/assets/fonts/" 
    ], 
    "directories": { 
    "assets:": "./src/assets" 
    } 

Какие способы используют их? В документации не упоминается, что можно сделать с ними, как только они были указаны.

Например, files docs говорят:

поле «Файлы» представляет собой массив файлов, чтобы включить в свой проект. Если вы укажете папку в массиве, то она также будет содержать файлы внутри этой папки.

Что означает «включить в ваш проект»? Включить, где? Как они теперь становятся доступными, что они не были раньше?

В directories section, документы говорят:

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

Каковы существующие креативные способы его использования?

+1

Я не уверен, почему это было приостановлено - может кто-то PLS повысить его, его законный вопрос. – Baz

ответ

15

«включить в свой проект» означает, что файлы будут находиться в упакованном архиве, который создается при запуске npm publish. Вы также можете запустить npm pack для генерации tarball для проверки без фактического запуска публикации. Таким образом, вы можете открыть созданный tarball и проверить, какие файлы были/не были включены.

Хотя .npmignore (или .gitignore в качестве прокси-сервера, если не .npmignore) функционирует как черный список файлов, чтобы игнорировать (таким образом, в том числе и все остальное по умолчанию), files массив является белый список. То есть вместо того, чтобы включать все по умолчанию, если указан массив files, все исключено по умолчанию, и только те файлы, явно перечисленные, будут включены в упакованный архив.

В качестве примера скажем, что ваш пакет представляет собой библиотеку, предназначенную для использования в браузере. Ваш код находится в lib/, и вы запустите браузер, чтобы скомпилировать его в совместимую с браузером библиотеку по адресу dist/index.js. Вы начинаете с кучи файлов, перечисленных в .gitignore, который используется как defacto .npmignore, которого не существует. Но теперь, когда dist/ полон сгенерированных файлов, вы хотите, чтобы они игнорировались из git repo. Если вы добавите их в .gitignore, они будут исключены из git repo, , но они также будут проигнорированы из пакета tarball. Таким образом, у вас есть два варианта: дублируйте свой .gitignore как .npmignore, но только список dist/ в .gitignore. Если вы это сделаете, вам придется хранить два файла почти, но не совсем в синхронизации. Этот путь является тедием и подвержен ошибкам.

Другой альтернативой является отсутствие .npmignore, а вместо этого просто список файлов, которые вы действительно хотите в пакете, в массиве files. README.*, package.json, CHANGELOG.* (возможно, еще пара) автоматически включаются в архив. Поэтому вы просто добавляете "files": [ "dist" ], и все готово.Теперь ваш пакет tarball не будет включать исходный источник JS от lib, а не tests/ и т. Д., Но вместо этого будет содержать только фактическую скомпилированную библиотеку в dist/.

Что касается directories, я обычно Перечислим lib (для ES5), src (для ES6, CoffeeScript, машинопись и т.д. источников), dist (для браузера или VM-специфической версии), test, output (для временных сгенерированных файлов, таких как отчеты о покрытии и т. д.), doc и т. д. Хотя это свойство не используется напрямую npm или другими инструментами, оно делает структуру каталогов явной. Кроме того, он делает каталоги Referenceable в НПХ скриптах так:

"scripts": { 
    "clean": "rm -rf $npm_package_directories_dist $npm_package_directories_output", 
    "lint": "eslint $npm_package_directories_src", 
    "test": "teenytest $npm_package_directories_test", 
} 

Таким образом, каталоги указаны только один раз, и если они меняются, только нужно изменить в одном месте (а не много на протяжении всего package.json).

+0

Отличный ответ, спасибо! – Baz

Смежные вопросы