【npm】前端工程项目配置文件package.json详解

简言

详细介绍了package.json中每个字段的作用。

package.json

本文档将为您介绍 package.json 文件的所有要求。它必须是实际的 JSON,而不仅仅是 JavaScript 对象文字。
如果你要发布你的项目,这是一个特别重要的文件,其中name和version是发布时的必要字段,两者组成发布包的唯一性。

字段描述

npm init 后默认字段如下:
在这里插入图片描述
我们可以按指定规则修改这个json文件。

name

name 是指软件包名
命名规则:

  • 名称必须小于或等于 214 个字符。这包括范围软件包的范围。
  • 作用域软件包的名称可以以点或下划线开头。如果没有作用域,则不允许这样做。
  • 新软件包名称中不能有大写字母。
  • 名称最终会成为 URL、命令行参数和文件夹名称的一部分。因此,名称中不能包含任何非 URL 安全字符。
  • 名称可选择以作用域作为前缀,例如 @myorg/mypackage。

提示:

  • 不要使用与 Node 核心模块相同的名称。
  • 不要在名称中使用 "js "或 “node”。因为你编写的是 package.json 文件,所以我们假定它是 js,你可以使用 "引擎 "字段指定引擎。(见下文)。
  • 该名称可能会作为参数传递给 require(),因此应该简短,但也要有合理的描述性。
  • 你可能需要检查一下 npm 注册表,看看是否已经有使用该名称的软件,以免过于依赖它。https://www.npmjs.com/

这是发布包的注意事项,如果你的项目不准备分享发布,则无所谓,建议和你项目相同。

version

指发布包版本号,x.x.x的形式。
版本必须能被 node-semver 解析,node-semver 作为依赖项与 npm 捆绑。(npm install semver 可自行使用)。
命名版本号建议遵循版本语义规范,:

代码状态阶段规则示例
首次发布新项目从 1.0.0 开始1.0.0
向后兼容的错误修复补丁发布递增第三个数字,相当于修改了bug,小改动1.0.1
向后兼容的新功能小版本递增中间数位,并将最后一位数重置为零,例如增加了新功能1.1.0
破坏向后兼容性的更改主要版本将第一位数字递增,并将中间和最后一位数字重置为零,破坏性重大更新,改动很大2.0.0

description

项目描述。
这是一个字符串。这有助于人们发现你的软件包,因为它会在 npm 搜索中列出。

keywords

项目关键字
这是一个字符串数组。这有助于人们在 npm 搜索中发现你的软件包。

homepage

项目主页的网址。
你可以写你git仓库readme地址,例如:

"homepage": "https://github.com/owner/project#readme"

bugs

项目问题跟踪器的网址和/或报告问题的电子邮件地址。这些信息对遇到软件包问题的人很有帮助。

{"bugs": {"url": "https://github.com/owner/project/issues","email": "project@hostname.com"}
}

您可以指定一个或两个值。如果只想提供一个 url,可以将 "bugs "的值指定为一个简单的字符串,而不是一个对象。

如果提供了 url,npm bugs 命令将使用该 url。

license

开源声明许可
您应指定软件包的许可证,以便人们知道他们可以如何使用该软件包,以及您对其设置的任何限制。
单个:

{"license": "BSD-3-Clause"
}

多个:

{"license": "(ISC OR GPL-3.0)"
}

不要任何开源许可:

{"license": "UNLICENSED"
}

author

项目作者名
包含一个 "姓名 "字段以及可选的 "url "和 “电子邮件”,就像这样:

{"name": "Barney Rubble","email": "b@rubble.com","url": "http://barnyrubble.tumblr.com/"
}

可以简写:

{"author": "Barney Rubble <b@rubble.com> (http://barnyrubble.tumblr.com/)"
}

contributors

"贡献者 "是一个作者数组,规则和author一样。

private

为true代表是私有的项目
如果在 package.json 中设置 “private”:true,那么 npm 将拒绝发布它。

main

入口文件
main 字段是一个模块 ID,它是程序的主要入口。也就是说,如果你的软件包名为 foo,用户安装后执行 require(“foo”) 命令,就会返回主模块的 exports 对象。

这应该是一个相对于软件包文件夹根目录的模块。

对于大多数模块来说,最合理的做法是有一个主脚本,而通常没有太多其他脚本。

如果未设置 main,则默认为软件包根目录下的 index.js。

browser

如果您的模块要在客户端使用,则应使用browser字段而不是main字段。这有助于提示用户,该模块可能依赖于 Node.js 模块中不可用的模块。(例如 window)

config

配置 "对象可用于设置软件包脚本中使用的配置参数,这些参数会在升级过程中持续存在。例如,如果一个软件包有以下配置:

{"name": "foo","config": {"port": "8080"}
}

scripts

运行命令集合(字典)
脚本 "属性是一个字典,包含在软件包生命周期的不同时间运行的脚本命令。键是生命周期事件,值是在该时刻运行的命令。

package.json 文件的 "scripts "属性支持大量内置脚本、预设生命周期事件以及任意脚本。这些脚本都可以通过运行 npm run-script 或 npm run 来执行。名称匹配的前置和后置命令也会被执行(例如 premyscript、myscript、postmyscript)。使用 npm explore – npm run 可以运行来自依赖项的脚本。
例如:

{"scripts": {"precompress": "{{ executes BEFORE the `compress` script }}","compress": "{{ run command to compress files }}","postcompress": "{{ executes AFTER `compress` script }}"}
}
npm run compress

有一个默认的 npm start命令,它会执行根目录的server文件,可以修改它。
后面路径写法:
命令行脚本 + 执行文件path + 参数

  • 可执行命令行脚本: 可以是全局的可执行bash脚本,也可一是依赖包目录下(node_modules/.bin)的bash脚本。
  • 执行文件 : 脚本运行的目标文件。
  • 参数: 参数使用 – 传递–前缀标志和选项,否则 npm 将对其进行解析。例如
node index.js --path=123

或者

npm run test -- --grep="pattern"

参数用 process.argv接收。

dependencies

生产依赖关系对象,对象内的所有依赖在正式发布打包时包含在内
依赖关系在一个简单对象中指定,该对象将软件包名称映射到版本范围。版本范围是一个字符串,包含一个或多个空格分隔的描述符。依赖关系也可以用 tar 包或 git URL 来标识。
依赖格式如下:

  • version : 必须与版本完全匹配
  • >version : 必须大于该版本,例如:>1.0.0,则依赖要比1.0.0版本大。
  • >=version :大于等于~
  • <version : 必须小于该版本
  • <=version:小于等于该版本
  • ~version:“大致相当于当前版本”,只接受小版本(第三个数变动)向后变动,1.0.x。
  • ^version:“与版本兼容”,只接受第2个数,第三个数变动,1.x.x
  • 1.2.x : 1.2.0、1.2.1 等,但不包括 1.3.0
  • http://… : 作为依赖项的 URL
    • 或者"" : 与任何版本匹配
  • version1 - version2 : version1到version2范围内,>=version1 <=version2
  • range1 || range2 :如果满足范围 1 或范围 2,则通过。
  • git… : 将 Git URL 作为依赖项,这个形式有点多,例如:git+ssh://git@github.com:npm/cli.git#v1.0.27
    git+ssh://git@github.com:npm/cli#semver:^5.0
    git+https://isaacs@github.com/npm/cli.git
    git://github.com/npm/cli.git#v1.0.27
  • tag : 可以时发布的标记版本,例如latest,代表最新版本
  • path/path/path : 本地项目依赖路径。

devDependencies

本地开发环境依赖、项目构建、和测试依赖的存放目录
在发布正式生产包时不会包含在内。
如果有人打算下载并在其程序中使用您的模块,那么他们可能不希望或不需要下载并构建您使用的外部测试或文档框架。

在这种情况下,最好将这些附加项目映射到 devDependencies 对象中。

peerDependencies

项目的同行依赖,也可以说项目在这些依赖的基础上创造,所以别人下载你的包会同时下载peerDependencies下的依赖包。

peerDependenciesMeta

同行依赖可选版本,可配置依赖是否可选。

{"name": "tea-latte","version": "1.3.5","peerDependencies": {"tea": "2.x","soy-milk": "1.2"},"peerDependenciesMeta": {"soy-milk": {"optional": true}}
}

bundleDependencies

打包依赖,定义了一个依赖数组,将在发布项目时将其中的依赖打包在一起。

如果需要在本地保存 npm 软件包,或通过单个文件下载来获得它们,可以通过在 bundleDependencies 数组中指定软件包名称并执行 npm pack,将软件包捆绑到一个压缩包文件中。

{"name": "awesome-web-framework","version": "1.0.0","bundleDependencies": ["renderized", "super-streams"]
}

我们可以通过运行 npm pack 获取 awesome-web-framework-1.0.0.tgz 文件。该文件包含依赖包 renderized 和 super-streams,执行 npm install awesome-web-framework-1.0.0.tgz 即可将其安装到新项目中。请注意,软件包名称中不包含任何版本,因为这些信息已在依赖项中指定。

overrides

依赖覆盖
如果需要对依赖包的依赖项进行特定更改,例如替换存在已知安全问题的依赖包版本、用分叉包替换现有依赖包,或确保所有地方都使用相同版本的软件包,则可以添加overrides。
重载提供了一种方法,可将依赖树中的软件包替换为另一个版本,或完全替换为另一个软件包。
例如:

{"overrides": {"foo": "1.0.0"}
}

无论什么情况foo的版本都是1.0.0
可以嵌套覆盖,表示baz的子代bar,bar版本2.0.0的子代foo设置为1.0.0:

{"overrides": {"baz": {"bar@2.0.0": {"foo": "1.0.0"}}}
}

不建议覆盖dependencies下的依赖,除非依赖软件包和覆盖本身共享完全相同的规范。为了使这一限制更容易处理,覆盖也可以定义为对直接依赖包规范的引用,方法是在希望版本匹配的软件包名称前加上 $

{"dependencies": {"foo": "^1.0.0"},"overrides": {// BAD, will throw an EOVERRIDE error// "foo": "^2.0.0"// GOOD, specs match so override is allowed// "foo": "^1.0.0"// BEST, the override is defined as a reference to the dependency"foo": "$foo",// the referenced package does not need to match the overridden one"bar": "$foo"}
}

engines

版本依赖范围
该字段仅为建议性字段,只有在软件包作为依赖关系安装时才会产生警告。

{"engines": {"node": ">=0.10.3 <15"}
}

与依赖关系一样,如果不指定版本(或指定 "*"作为版本),那么任何版本的 node 都可以使用。

os

您可以指定模块将在哪些操作系统上运行:

{"os": ["darwin", "linux"]
}

cpu

如果您的代码只能在某些 CPU 架构上运行,您可以指定是哪些架构。

{"cpu": ["x64", "ia32"]
}

publishConfig

这是一组将在发布时使用的配置值。如果你想设置标签、注册表或访问权限,它就特别方便,这样你就能确保给定的软件包不会被标记为 “最新”、不会被发布到全局公共注册表或某个作用域模块默认为私有。

workspaces

工作区
可选的 workspaces 字段是一个文件模式数组,用于描述安装客户端应在本地文件系统中查找的位置,以便找到需要以符号链接方式连接到顶级 node_modules 文件夹的每个工作区。

它既可以描述用作工作区的文件夹的直接路径,也可以定义将解析到这些相同文件夹的 globs(父路径)。

在下面的示例中,只要文件夹 ./packages 内有有效的 package.json 文件,位于该文件夹内的所有文件夹都将被视为工作区:

{"name": "workspace-example","workspaces": ["./packages/*"]
}

files

可选的 files 字段是一个文件模式数组,用于描述将你的软件包作为依赖关系安装时要包含的条目。文件模式的语法与 .gitignore 类似,但正好相反:包含文件、目录或 glob 模式(、**/ 等)将使该文件在打包时包含在压缩包中。省略该字段将使其默认为[“*”],即包含所有文件。

你也可以在软件包的根目录或子目录中提供 .npmignore 文件,这样文件就不会被包含在内了。在软件包的根目录中,它不会覆盖 "files "字段,但在子目录中则会。.npmignore 文件的作用与 .gitignore 文件类似。如果存在 .gitignore 文件,而 .npmignore 丢失,则将使用 .gitignore 的内容。

bin

很多软件包都有一个或多个可执行文件,它们希望将这些文件安装到 PATH 中。npm 可以轻松实现这一点(事实上,它就是利用这一功能来安装 "npm "可执行文件的)。

要使用此功能,请在 package.json 中提供 bin 字段,该字段是命令名称与本地文件名称的映射。在全局安装此软件包时,该文件会链接到全局 bins 目录中,或者创建一个 cmd(Windows 命令文件)来执行 bin 字段中指定的文件,因此可以通过名称或 name.cmd (在 Windows PowerShell 上)来运行。当该软件包作为依赖关系安装到另一个软件包时,该文件将被链接到该软件包中,可直接通过 npm exec 执行,或在其他脚本中通过 npm run-script 以名称调用。
例如:

{"bin": {"myapp": "./cli.js"}
}

因此,当你安装 myapp 时,如果是 unix-like 操作系统,它会从 cli.js 脚本创建一个符号链接到 /usr/local/bin/myapp;如果是 windows 操作系统,它会创建一个 cmd 文件,通常位于 C:\Users{Username}\AppData\Roaming\npm\myapp.cmd,用于运行 cli.js 脚本。

如果只有一个可执行文件,且其名称应是软件包的名称,那么只需以字符串形式提供即可。例如

{"name": "my-program","version": "1.2.5","bin": "./path/to/program"
}

相同写法:

{"name": "my-program","version": "1.2.5","bin": {"my-program": "./path/to/program"}
}

请确保 bin 中引用的文件以 #!/usr/bin/env node 开头,否则脚本将在没有 node 可执行文件的情况下启动!

结语

结束了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/732267.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

王升:Audio电感对车载功放EMC的影响 | 演讲嘉宾公布

一、智能车载音频 II 专题论坛 智能车载音频 II 专题论坛将于3月28日同期举办&#xff01; 我们正站在一个前所未有的科技革新的交汇点上&#xff0c;重塑我们出行体验的变革正在悄然发生。当人工智能的磅礴力量与车载音频相交融&#xff0c;智慧、便捷与未来的探索之旅正式扬帆…

若依/RuoYi-Vue使用docker-compose部署

系统需求 JDK > 1.8 MySQL > 5.7 Maven > 3.0 Node > 12 Redis > 3 思路 前端服务器 nginx 后端服务器代码打包 java、maven、node 数据库/缓存 mysql、redis 开始 创建目录ruoyi并进入 克隆若依代码 git clone RuoYi-Vue: &#x1f389; 基于Spring…

试用期自我总结报告10篇

试用期自我总结报告&#xff08;篇1&#xff09; 一转眼试用期的时间飞快就过去了&#xff0c;在这段时间里我学习到了很多&#xff0c;也把自己在过去学习的东西得已融会贯通。能够来到幼儿园里成为一名老师是我一直以来的目标&#xff0c;而我也终于完成了自己的目标&#x…

Winform窗体随着屏幕的DPI缩放,会引起窗体变形及字体变形,superTabControl标签字体大小不匹配

一、前言 superTabControl做的浏览器标签(cefsharp)在缩放比例(125%,150%时字体不协调) 物联网浏览器,定制浏览器,多媒体浏览器(支持H264)参考栏目文章即可 二、配置参数 app.manifest参数 dpiAware =true <application xmlns="urn:schemas-microsoft-c…

用 Axios 提升前端异步请求的效率

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

ubuntu22.01安装及配置

前言 本次安装基于VMware Pro 16进行安装。 ubuntu版本&#xff1a;ubuntu-22.04.3-live-server-amd64.iso 1、下载 1.1官网下载 https://ubuntu.com/download 1.2、清华大学镜像网站下载 https://mirrors.tuna.tsinghua.edu.cn/ 进入网站后搜索ubuntu&#xff0c;选择ubu…

Claude3超大杯发布,将取代ChatGPT4?

演示站点&#xff1a; https://ai.uaai.cn 创作模块 &#xff08;Claude3已接入&#xff0c;欢迎体验&#xff09;官方论坛&#xff1a; www.jingyuai.com 前言 今天【超越GPT-4 接近人类水平&#xff01;Claude 3系列大模型惊艳问世】登上了全网热搜&#xff0c;那么【超…

微信小程序实现上拉加载更多

一、前情提要 微信小程序中实现上拉加载更多&#xff0c;其实就是pc端项目的分页。使用的是scroll-view&#xff0c;scroll-view详情在微信开发文档/开发/组件/视图容器中。每次上拉&#xff0c;就是在原有数据基础上&#xff0c;拼接/合并上本次上拉请求得到的数据。这里采用…

电动机工作原理图

电机&#xff08;俗称“马达”&#xff09;是指依据电磁感应定律实现电能转换或传递的一种电磁装置。它的主要作用是产生驱动转矩&#xff0c;作为用电器或各种机械的动力源。 电动机&#xff0c;转子置于旋转磁场中&#xff0c;在旋转磁场的作用下&#xff0c;获得一个转动力…

SSRF漏洞基础原理(浅层面解释 + 靶场演示)

一、SSRF漏洞的基本概念&#xff1a; SSRF--全名&#xff1a;Server-Side Request Forgery&#xff0c;汉译&#xff1a;服务端请求伪造&#xff0c;漏洞别名“借刀杀人”。 想象以下&#xff0c;现存在一个 Web应用&#xff0c;这个Web应用可以帮助我们能爬取互联网上的其他…

好的软件测试人员简历是什么样子的?

简历是入职职场的一张名片&#xff0c;也是进入职场一块“敲门砖”。从某种角度说&#xff0c;简历也是一张专业人员的说明书。 软件测试人员作为IT行业具有技术含量的职业&#xff0c;一份优秀的简历包含的内容以及如何写好简历尤为重要。接下来从以下两方面来介绍这个话题&a…

cannot import name ‘Flask‘ from partially initialized module ‘flask‘

bug&#xff1a; ImportError: cannot import name Flask from partially initialized module flask (most likely due to a circular import) (G:\pythonProject6\flask.py) 这个是因为包的名字和文件的名字一样 修改文件名&#xff1a; 结果 &#x1f923;&#x1f923;&…

preg_replace漏洞e模式函数执行

关于PHP函数preg_replace \e 模式函数执行漏洞 preg_replace&#xff1a; ​ 该函数执行一个正则表达式的搜索和替换。 ​ 语法&#xff1a; mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit -1 [, int &$count ]] )​ 搜索…

“删边“的并查集------反向并查集

目录 1.题目2.思路3.代码 默认大家都会并查集了 1.题目 小美认为&#xff0c;在人际交往中&#xff0c;但是随着时间的流逝&#xff0c;朋友的关系也是会慢慢变淡的&#xff0c;最终朋友关系就淡忘了。 现在初始有一些朋友关系&#xff0c;存在一些事件会导致两个人淡忘了他们…

Offer必备算法12_链表_五道力扣题详解(由易到难)

目录 ①力扣2. 两数相加 解析代码 ②力扣24. 两两交换链表中的节点 解析代码 ③力扣143. 重排链表 解析代码 ④力扣23. 合并 K 个升序链表 解析代码1&#xff08;小根堆优化&#xff09; 解析代码2&#xff08;递归_归并&#xff09; ⑤力扣25. K 个一组翻转链表 解…

MongoDB开启事务

MongoDB开启事务 配置单节点。到路径C:\Program Files\MongoDB\Server\4.0\bin 使用记事本以管理员权限打开文件mongod.cfg添加如下配置&#xff1a; replication:replSetName: rs02. 重启MongoDB服务 3. 重启后执行命令 rs.initiate()

【蓝牙协议栈】【经典蓝牙】【BLE蓝牙】蓝牙协议规范(射频、基带链路控制、链路管理)

目录 1. 蓝牙协议规范&#xff08;射频、基带链路控制、链路管理&#xff09; 1.1 射频协议 1.2 基带与链路控制协议 1.3 链路管理器 1. 蓝牙协议规范&#xff08;射频、基带链路控制、链路管理&#xff09; 蓝牙协议是蓝牙设备间交换信息所应该遵守的规则。与开放系…

vue2 div滚动条下拉到底部时触发事件(懒加载) 超级简易版本的懒加载

文章目录 导文文章重点内容效果展示&#xff1a;代码展示这些方法适用于哪些场景 总结 导文 vue2 div滚动条下拉到底部时触发事件(懒加载) 超级简易版本的懒加载 文章重点 内容效果展示&#xff1a; 当div拉到底部的时候&#xff1a; 编辑器返回&#xff1a; 代码展示 在…

【黑马程序员】Python初始

初始Python Python应用场景 什么是编程语言 安装Python开发环境 Python官网 选择Download 选择对应的Python版本和所要下载的操作系统 下载后直接下一步下一步即可安装成功 测试安装效果 重命名python命令让其使用Python3 echo alias python"python3" >…

登录校验认证

会话技术 会话&#xff1a;用户打开浏览器&#xff0c;访问web服务器的资源&#xff0c;会话建立&#xff0c;直到有一方断开连接&#xff0c;会话结束。在一次会话中可以包含多次请求和响应。 会话跟踪&#xff1a; 一种维护浏览器状态的方法&#xff0c;服务器需要识别多次请…