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

news2024/11/16 19:34:19

简言

详细介绍了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.coloradmin.cn/o/1502160.html

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

相关文章

智能音箱技术解析

目录 前言智能音箱执行步骤解析1.1 探测唤醒词或触发词1.2 语音识别1.3 意图识别1.4 执行指令 2 典型的智能音箱2.1 百度小度音响2.2 小米小爱同学2.3 苹果 HomePod 3 功能应用举例3.1 设置计时器3.2 播放音乐 结语 前言 智能音箱已经成为日常生活中不可或缺的一部分&#xff…

(七)数据库的安全性

7.1存取控制 7.1.1自主存取控制DAC 7.1.2强制存取控制MAC 7.2审计 其他安全性保护

【字符串】【分类讨论】【KMP】1163. 按字典序排在最后的子串

作者推荐 视频算法专题 本文涉及知识点 字符串 字典序 分类讨论 本题无法使用KMP&#xff0c;因为t1不段变化。 LeetCode1163. 按字典序排在最后的子串 给你一个字符串 s &#xff0c;找出它的所有子串并按字典序排列&#xff0c;返回排在最后的那个子串。 示例 1&#xf…

关于华为昇腾(Ascend)AI芯片,CANN计算架构,MindSpore深度学习框架,MindStudio开发工具

1、华为昇腾生态 深度学习之前的配置都是&#xff1a;NVIDIA GPU / CPU CUDA Tensorflow/PyTorch 后来老美禁止 NVIDIA 卖GPU芯片给我们&#xff0c;于是国内企业开始发力CPU和GPU硬件&#xff0c;成果丰硕&#xff0c;虽然与NVIDIA顶级GPU还有一些差距&#xff0c;但是也不…

网络故障基本判断方法

1&#xff09;电脑上使用winR键&#xff0c;打开运行窗口&#xff0c;输入CMD命令&#xff0c;点击回车键 2&#xff09;在弹出的CMD运行窗口中输入ipconfig命令 通过该命令可以查看本机的IP地址&#xff0c;子网掩码和网关等信息。确认电脑中所有网卡配置是否正确。 3&…

有点炫酷有点diao的免费wordpress模板主题

这是一款经典的免费wordpress主题&#xff0c;被广泛应用于多个行业的网站。 https://www.wpniu.com/themes/189.html

【linux】04 :linix实用操作

1.常用快捷键 ctrlc表示强制停止。linux某些程序的运行&#xff0c;如果想强制停止&#xff0c;可以使用&#xff1b;命令输入错误&#xff0c;也可以通过ctrlc,退出当前输入&#xff0c;重新输入。 ctrld表示退出登录&#xff0c;比如退出root以回到普通用户&#xff0c;或者…

visual studio 将编译后的dll等文件自动复制到指定目录

编译后的文件dll等总要手动复制到指定目录下&#xff0c;为了解决这一繁琐的操作&#xff0c;可以直接设置在编译完成后&#xff0c;自动复制到目标目录 - 在解决方案资源管理器&#xff0c;选中项目右键-》选中属性-》在弹出的面板选择生成事件 - 在后期生成事件命令行里填写…

IOS降级后从高版本到低版本恢复备份

IOS降级后从高版本到低版本恢复备份 此方法只适用于小版本还原&#xff0c;比如17.4->17.3&#xff0c;未验证大版本恢复可行性手机型号&#xff1a;iphone 13pro 系统版本&#xff1a;17.4 降级版本&#xff1a;17.3.1 步骤 通过itunes或者MacOS系统下对当前版本进行备份…

React-useEffect

1.概念 说明&#xff1a;用于在React组件中创建不是由事件引起而是由渲染本身引起的操作&#xff0c;比如发送 A列AX请求&#xff0c;更改DOM等。 2.案例 // useEffect用于组件不是由事件引起的而是由渲染本身引起的操作&#xff0c;如ajax,更改Dom等。 import { useEffect,…

【MapReduce】03.MapReduce框架原理

目录 1.InputFormat数据输入 1.1.切片与MapTask并行度决定机制 1.2.Job提交流程源码和切片源码 1.3.FileInputFormat切片机制 1.4.TextInputFormat 1.5.CombineTextInputFormat切片机制 1.6.CombineTextInputFormat 1.InputFormat数据输入 1.1.切片与MapTask并行度决定…

小白跟做江科大51单片机之AD/DA

1.看原理图找接口 2.看时序图编写读取数据代码 XPT2046.c代码 #include <REGX52.H> //引脚定义 sbit XPY2046_DINP3^4; sbit XPY2046_CSP3^5; sbit XPY2046_DCLKP3^6; sbit XPY2046_DOUTP3^7; unsigned int XPT2046_ReadAD(unsigned char Command) { unsigned char …

基于SSM的党务政务服务热线平台(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的党务政务服务热线平台&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spri…

Windows®、Linux® 和 UNIX® 系统都适用的远程桌面工具 OpenText ETX

Windows、Linux 和 UNIX 系统都适用的远程桌面工具 OpenText ETX 为 Windows、Linux 和 UNIX 实施精益、经济高效的虚拟化&#xff1b;提供完整的远程 Windows 可用性&#xff1b;以类似本地的性能远程工作&#xff1b;安全地保护系统和知识产权&#xff08;IP&#xff09;&am…

landsat遥感卫星地表温度LST计算教程

地表温度反演算法主要有以下三种&#xff1a;大气校正法&#xff08;也称为辐射传输方程&#xff1a;Radiative Transfer Equation——RTE&#xff09;、单通道算法和分裂窗算法。 大气校正法基本原理&#xff1a;首先估计大气对地表热辐射的影响, 然后把这部分大气影响从卫星传…

MySQL实战:SQL优化及问题排查

有更合适的索引不走&#xff0c;怎么办&#xff1f; MySQL在选取索引时&#xff0c;会参考索引的基数&#xff0c;基数是MySQL估算的&#xff0c;反映这个字段有多少种取值&#xff0c;估算的策略为选取几个页算出取值的平均值&#xff0c;再乘以页数&#xff0c;即为基数 查…

24V 36V 48V 60V 72V 转3.3V 5V动态响应好 惠海H62410A模块供电解决方案

H62410A是一种内置100V耐压MOS&#xff0c;支持输入高达90V的高压降压开关控制器&#xff0c;可以向负载提供1A的连续电流。H62410A支持输出恒定电压&#xff0c;可以通过调节VFB采样电阻来设置输出电压&#xff0c;同时支持最大电流限制&#xff0c;可以通过修改CS采样电阻来设…

线下活动线上同步直播?媒体同步直播的好处

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 线下活动线上同步直播&#xff0c;即利用互联网技术将线下活动的实时内容传输到线上平台&#xff0c;供无法到场的观众在线观看。这种直播方式的好处主要体现在以下几个方面&#xff1a;…

自动驾驶技术解析与关键步骤

目录 前言1 自动驾驶主要技术流程1.1 车辆周围环境感知1.2 车辆和行人检测分析1.3 运动轨迹规划 2 关键技术概述2.1 车辆探测与图片输入2.2 行人检测2.3 运动规划2.4 电子地图2.5 轨迹预测2.6 交通灯分析2.7 故障检测 结语 前言 自动驾驶汽车作为未来交通领域的重要发展方向&a…

13:大数据与Hadoop|分布式文件系统|分布式Hadoop集群

大数据与Hadoop&#xff5c;分布式文件系统&#xff5c;分布式Hadoop集群 Hadoop部署Hadoop HDFS分布式文件系统HDFS部署步骤一&#xff1a;环境准备HDFS配置文件 查官方手册配置Hadoop集群 日志与排错 mapreduce 分布式离线计算框架YARN集群资源管理系统步骤一&#xff1a;安装…