1 Обзор
С того момента, как мы коснемся внешнего интерфейса, в корневом каталоге каждого проекта обычно находится файл package.json, который определяет различные модули, необходимые для текущего проекта, а также информацию о конфигурации проекта (например, имя , версия, лицензия и т. д.).
при бегеnpm installПри команде он будет основан наpackage.jsonКонфигурация в файле автоматически загружает необходимые модули, то есть среды выполнения и среды разработки, требуемые проектом конфигурации.
Например, в следующем файле существует только простое имя проекта и номер версии.
{
"name" : "yindong",
"version" : "1.0.0",
}
Package.json Файл - это объект JSON, который можно увидеть из его расширения .json, каждый элемент этого объекта представляет собой настройку для текущего проекта. Например, имя - это имя проекта, версия - это номер версии.
Конечно, многих людей действительно не волнует конфигурация package.json, их приложение больше зависит от конфигурации или devDependencies.
Ниже приведен более полный файл package.json, в котором подробно объясняется, что на самом деле означает каждое поле.
{
"name": "yindong",
"version":"0.0.1",
"description": "antd-theme",
"keywords":["node.js","antd", "theme"],
"homepage": "https://zhiqianduan.com",
"bugs":{"url":"http://path/to/bug","email":"yindong@xxxx.com"},
"license": "ISC",
"author": "yindong",
"contributors":[{"name":"yindong","email":"yindong@xxxx.com"}],
"files": "",
"main": "./dist/default.js",
"bin": "",
"man": "",
"directories": "",
"repository": {
"type": "git",
"url": "https://path/to/url"
},
"scripts": {
"start": "webpack serve --config webpack.config.dev.js --progress"
},
"config": { "port" : "8080" },
"dependencies": {},
"devDependencies": {
"@babel/core": "^7.14.3",
"@babel/preset-env": "^7.14.4",
"@babel/preset-react": "^7.13.13",
"babel-loader": "^8.2.2",
"babel-plugin-import": "^1.13.3",
"glob": "^7.1.7",
"less": "^3.9.0",
"less-loader": "^9.0.0",
"style-loader": "^2.0.0",
"webpack": "^5.38.1",
"webpack-cli": "^4.7.0",
"webpack-dev-server": "^3.11.2"
},
"peerDependencies": {
"tea": "2.x"
},
"bundledDependencies": [
"renderized", "super-streams"
],
"engines": {"node": "0.10.x"},
"os" : [ "win32", "darwin", "linux" ],
"cpu" : [ "x64", "ia32" ],
"private": false,
"publishConfig": {}
}
2. поле имени
package.jsonСамое главное в файлеnameа такжеversionполя, оба из которых являются обязательными. Имя и версия вместе образуют идентификатор, который считается полностью уникальным. Изменения в пакетах должны идти рука об руку с изменениями в версиях.
nameДолжно быть меньше или равно 214 символам и не может начинаться с.или_начиная с заглавной буквы, так как имя становится частью URL-адреса и, следовательно, не может содержать никаких небезопасных для URL-адресов символов.npmОфициально рекомендуется, чтобы мы не использовали то же имя, что и модуль основного узла. не добавляйте к имениjsилиnode. можно использовать при необходимостиenginesдля указания операционной среды.
Имя передается в качестве параметраrequire, поэтому он должен быть кратким, но также достаточно описательным.
3. поле версии
versionОбщий форматx.x.x, и это правило необходимо соблюдать.
package.jsonСамое главное в файлеnameа такжеversionполя, оба из которых являются обязательными. Имя и версия вместе образуют идентификатор, который считается полностью уникальным. каждый раз, когда вы публикуетеversionне может соответствовать тому, что уже существует.
4. поле описания
descriptionстрока, используемая для записи описательной информации. помогать людям вnpmНайдите свой модуль при поиске в библиотеке.
5. поле ключевых слов
keywordsпредставляет собой массив строк, который помогает людям вnpmНайдите свой модуль при поиске в библиотеке.
6. поле домашней страницы
homepageАдрес главной страницы проекта.
7. поле ошибок
bugsАдрес проблемы или адрес электронной почты для обратной связи по проблемам проекта.
"bugs": {
"url" : "https://github.com/owner/project/issues",
"email" : "project@hostname.com"
}
8. поле лицензии
license— это протокол текущего проекта, позволяющий пользователям узнать, какие разрешения у них есть на использование вашего модуля и какие ограничения применяются к использованию этого модуля.
"license" : "BSD-3-Clause"
9. поле авторов поле авторов
authorконкретный человек,contributorsПредставляет группу людей, все из которых представляют участников текущего проекта. В то же время каждый является объектом. имеютnameполя и необязательныеurlа такжеemailполе.
"author": {
"name" : "yindong",
"email" : "yindong@xx.com",
"url" : "https://zhiqianduan.com/"
}
также можно записать в виде строки
"author": "yindong yindong@xx.com (https://zhiqianduan.com/)"
10. поле файлов
filesЗначением атрибута является массив, а содержимым — имя файла или имя папки в модуле. Если это имя папки, все файлы в папке также будут включены (если файлы не исключены другими конфигурациями).
Вы можете создать его в корневом каталоге модуля..npmignoreфайл, даже если файл, записанный в этом файле, написан наfilesсвойства также будут исключены.Этот файл пишется так же, как и.gitignoreаналогичный.
11. основное поле
mainполе указывает файл ввода для загрузки,requireЭтот файл загружается при импорте. Значение по умолчанию для этого поля ниже корневого каталога модуля.index.js.
12. поле корзины
binЭлемент используется для указания местоположения исполняемого файла, соответствующего каждой внутренней команде. Если вы пишете инструмент узла, он обязательно будет использоватьсяbinполе.
когда мы пишемcliПри использовании инструмента необходимо указать команду запуска инструмента, например, обычно используемуюwebpackмодуль, его команда запускаwebpack.
"bin": {
"webpack": "bin/index.js",
}
когда мы выполняемwebpackбудет выполнено, когда командаbin/index.jsкод в файле.
Модуль устанавливается как зависимость, если она существуетbinопции. существуетnode_modules/.bin/создать соответствующий файл,NpmИщет файл, создает символическую ссылку в каталоге node_modules/.bin/. Поскольку каталог node_modules/.bin/ будет добавлен в системную переменную PATH во время выполнения, поэтому при запуске npm вы не сможете напрямую через команду вызывать эти скрипты.
Все команды в каталоге node_modules/.bin/ можно запускать в формате npm run [команда]. В командной строке введите npm run, затем нажмите клавишу табуляции, отобразятся все доступные команды.
13. мужское поле
manиспользуется для указания текущего модуляmanМестонахождение документа.
"man" :[ "./doc/calc.1" ]
14. поле каталогов
directoriesРазработайте какой-нибудь метод для описания структуры модуля, чтобы сообщить пользователю, где находится каждый каталог.
15. поле репозитория
Укажите адрес хранения кода, который будет полезен для тех, кто хочет внести свой код в ваш проект.
"repository" : {
"type" : "git",
"url" : "https://github.com/npm/npm.git"
}
16. поле скриптов
scriptsУказывает аббревиатуру командной строки npm для запуска команды скрипта.Например, start указывает команду, которая будет выполняться при запуске npm run start.
"scripts": {
"start": "node ./start.js"
}
использоватьscriptsПоле может быстро выполнять команды оболочки, которые можно понимать какalias.
scriptsВы можете напрямую использовать модули, установленные в node_modules, что отличается от прямого запуска.npxЗаказ.
"scripts": {
"build": "webpack"
}
// npm run build
// npx webpack
17. поле конфигурации
configПоле используется для добавления переменных среды для командной строки.
{
"name" : "yindong",
"config" : { "port" : "8080" },
"scripts" : { "start" : "node server.js" }
}
Затем вserver.jsможно сослаться на скриптconfigзначение поля.
console.log(process.env.npm_package_config_port); // 8080
Пользователи могут проходитьnpm config setизменить это значение.
npm config set yindong:port 8000
18. поле зависимостей, поле devDependencies
dependenciesПоле указывает модуль, от которого зависит запуск проекта,devDependenciesУкажите модули, необходимые для разработки проекта.
Их значение является объектом. Каждый элемент объекта состоит из имени модуля и соответствующих требований к версии, соответственно, с указанием зависимого модуля и диапазона его версий.
Используется при установке зависимостей--saveПараметр указывает, что модуль записывается в свойство зависимостей,--save-devУказывает, что модуль записывается в свойство devDependencies.
"devDependencies": {
"webpack": "^5.38.1",
}
Каждый элемент объекта представлен парой ключ-значение, которой предшествует имя модуля, за которым следует номер версии соответствующего модуля. Номер версии соответствует формату «основная версия.дополнительная версия.дополнительная версия».
Выходные данные
Исправленная версия: например.
5.38.1, во время установки будет установлена только указанная версия. тильда: напр.~5.38.1, означает установить последнюю версию 5.38.х (не ниже 5.38.1), но не ставить 5.39.х, а значит, номера основной и минорной версии не меняются при установке. каретка: напр.ˆ5.38.1, , что означает установить последнюю версию 5.x.x (не ниже 5.38.1), но не устанавливать 6.x.x, то есть при установке основной номер версии не изменится. Следует отметить, что если основной номер версии равен 0, знак вставки ведет себя так же, как и тильда, потому что в настоящее время он находится в стадии разработки, и даже если дополнительный номер версии изменится, он может привести к несовместимости программы. последняя: установить последнюю версию.
19. Поле PeerDependencies
Когда мы разрабатываем модуль, будет проблема, если текущий модуль и зависимый модуль одновременно зависят от стороннего модуля, и они зависят от двух несовместимых версий.
Например, ваш проект зависит от версии 1.0 модуля A и модуля B, а сам модуль A зависит от версии 2.0 модуля B.
В большинстве случаев это не представляет проблемы, и две версии модуля B могут сосуществовать и работать одновременно. Однако существует ситуация, когда возникает проблема, когда эта зависимость будет открыта для пользователя.
Наиболее типичным сценарием является плагин, например, модуль А является плагином модуля Б. Модуль B, установленный пользователем, имеет версию 1.0, но подключаемый модуль A можно использовать только с модулем B версии 2.0. В это время, если пользователь передаст экземпляр версии 1.0 B в A, возникнет проблема. Следовательно, необходим механизм, напоминающий пользователю при установке шаблона о том, что если A и B установлены вместе, то B должен быть модулем версии 2.0.
peerDependenciesПоле используется плагином для указания версии основного инструмента, который ему нужен. в состоянии пройтиpeerDependenciesПоле для ограничения, использование модуля myless должно полагаться на версию 3.9.x модуля less.
{
"name": "myless",
"peerDependencies": {
"less": "3.9.x"
}
}
Обратите внимание, что начиная с версии NPM 3.0,peerDependenciesОн больше не устанавливается по умолчанию. Он не выводится по умолчанию при инициализации.
20. поле bundledDependencies
bundledDependenciesУказывает модули, которые будут объединены вместе при публикации.
21. Необязательное поле зависимостей
Если можно использовать зависимый модуль, и вы также хотите, чтобы модуль не был найден или недоступенnpmПродолжайте работать, вы можете поместить эту зависимость модуля вoptionalDependenciesв конфигурации. То, как эта конфигурация написана иdependenciesСпособ написания тот же, разница в том, что сбой установки написанного здесь модуля не вызоветnpm installпотерпеть неудачу.
22. Поле двигателей
enginesПоле указывает платформу, на которой работает модуль, напримерNodeилиnpmверсия или браузер .
{ "engines" : { "node" : ">=0.10.3 <0.12", "npm" : "~1.0.20" } }
23. поле ОС
Вы можете указать, на какой операционной системе может работать ваш модуль.
"os" : [ "darwin", "linux", "win32" ]
24. поле процессора
Ограничение модулей только в определенной архитектуреcpuбежать под
"cpu" : [ "x64", "ia32" ]
25. частные поля
Если это свойство установлено вtrue,npmОткажется публиковать его, чтобы предотвратить непреднамеренную публикацию приватного модуля.
"private": true
26. Поле publishConfig
Эта конфигурация вступит в силу, когда модуль будет опубликован, и используется для установки набора значений, используемых для публикации. Если вы не хотите, чтобы модуль по умолчанию помечался как актуальный или публиковался в общедоступном репозитории по умолчанию, вы можете настроить тег или адрес репозитория здесь.
как правилоpublishConfigбудет сотрудничатьprivateИспользовать, если вы просто хотите, чтобы модуль был опубликован для определенногоnpmСклад, такой как внутренний склад.
"private": true,
"publishConfig": {
"tag": "1.0.0",
"registry": "https://registry.npmjs.org/",
"access": "public"
}
27. Поле PreferGlobal
preferGlobalЗначение является логическим значением, указывающим, что, когда пользователь не устанавливает модуль как глобальный модуль (то есть без параметра --global), следует ли отображать предупреждение, указывающее, что модуль предназначен для установки как глобальный модуль.
"preferGlobal": false
28. поле браузера
browserУказывает версию этого шаблона, которую будут использовать браузеры.BrowserifyТакой инструмент упаковки браузера, благодаря которому он знает, какой файл нужно упаковать.
"browser": {
"tipso": "./node_modules/tipso/src/tipso.js"
},
Справочный источник
Уведомление о перепечатке
Если воспроизводится, это должно быть помечено文章出处,文章名称,文章作者, в следующем формате:
转自:【掘金 - https://juejin.cn/】 你真的了解package.json吗?来看看吧,这可能是最全的package解析 "隐冬"