【Node】package.json文件

2023-10-27

package.json 文件详解
前言
一、package.json 文件作用
二、package.json 文件创建
三、package.json 文件示例
四、package.json 文件配置说明

五、项目依赖

六、开发依赖

七、Node.js中模块的加载机制

前言

每个项目的根目录下面都有一个package.json文件,定义了这个项目所需要各种模块,以及项目的配置信息(比如名称、版本、许可证等元数据)。npm install 命令根据这个配置文件,自动下载所需要的模块,也就是配置项目所需的运行和开发环境

node_modules文件夹的问题

  1. 文件夹以及文件过多过碎,当我们将项目整体拷贝给别人的时候,传输速度会很慢
  2. 复杂的模块依赖关系需要被记录,确保模块的版本和当前保持一致,否则会导致当前项目运行报错

一.package.json文件的作用

项目描述文件,记录了当前项目信息,例如项目名称、版本、作者、github地址、当前项目依赖了哪些第三方模块,使用npm init -y命令生成。

二、package.json 文件创建

package.json 文件创建有两种方式,手动创建或者自动创建。

手动创建
直接在项目根目录新建一个 package.json 文件,然后输入相关的内容。
自动创建
也是在项目根目录下执行 npm init,然后根据提示一步步输入相应的内容完成后即可自动创建。

三、package.json 文件示例

{
  "name": "exchange",
  "version": "0.1.0",
  "author": "zhangsan <zhangsan@163.com>",
  "description": "第一个node.js程序",
  "keywords":["node.js","javascript"],
  "private": true,
  "bugs":{"url":"http://path/to/bug","email":"bug@example.com"},
  "contributors":[{"name":"李四","email":"lisi@example.com"}],
  "repository": {
		"type": "git",
		"url": "https://path/to/url"
	},
  "homepage": "http://necolas.github.io/normalize.css",
  "license":"MIT",
  "dependencies": {
    "react": "^16.8.6",
    "react-dom": "^16.8.6",
    "react-router-dom": "^5.0.1",
    "react-scripts": "3.0.1"
  },
  "devDependencies": {
    "browserify": "~13.0.0",
    "karma-browserify": "~5.0.1"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "bin": {
  "webpack": "./bin/webpack.js"
  },
  "main": "lib/webpack.js",
  "module": "es/index.js",
  "eslintConfig": {
    "extends": "react-app"
  },
  "engines" : { 
    "node" : ">=0.10.3 <0.12" 
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  },
  "style": [
  "./node_modules/tipso/src/tipso.css"
],
  "files": [
    "lib/",
    "bin/",
    "buildin/",
    "declarations/",
    "hot/",
    "web_modules/",
    "schemas/",
    "SECURITY.md"
  ]
}

四、package.json 文件配置说明

name:项目/模块名称,长度必须小于等于214个字符,不能以"."(点)或者"_"(下划线)开头,不能包含大写字母。
version:项目版本。
author:项目开发者,它的值是你在https://npmjs.org网站的有效账户名,遵循“账户名<邮件>”的规则,例如:zhangsan zhangsan@163.com。
description:项目描述,是一个字符串。它可以帮助人们在使用npm search时找到这个包。
keywords:项目关键字,是一个字符串数组。它可以帮助人们在使用npm search时找到这个包。
private:是否私有,设置为 true 时,npm 拒绝发布。
license:软件授权条款,让用户知道他们的使用权利和限制。
bugs:bug 提交地址。
contributors:项目贡献者 。
repository:项目仓库地址。
homepage:项目包的官网 URL。
dependencies:生产环境下,项目运行所需依赖。
devDependencies:开发环境下,项目所需依赖。
scripts:执行 npm 脚本命令简写,比如 “start”: “react-scripts start”, 执行 npm start 就是运行 “react-scripts start”。
bin:内部命令对应的可执行文件的路径。
main:项目默认执行文件,比如 require(‘webpack’);就会默认加载 lib 目录下的 webpack.js 文件,如果没有设置,则默认加载项目跟目录下的 index.js 文件。
module:是以 ES Module(也就是 ES6)模块化方式进行加载,因为早期没有 ES6 模块化方案时,都是遵循 CommonJS 规范,而 CommonJS 规范的包是以 main 的方式表示入口文件的,为了区分就新增了 module 方式,但是 ES6 模块化方案效率更高,所以会优先查看是否有 module 字段,没有才使用 main 字段。
eslintConfig:EsLint 检查文件配置,自动读取验证。
engines:项目运行的平台。
browserslist:供浏览器使用的版本列表。
style:供浏览器使用时,样式文件所在的位置;样式文件打包工具parcelify,通过它知道样式文件的打包位置。
files:被项目包含的文件名数组。

五、项目依赖

  • 在项目的开发阶段和线上运营阶段,都需要依赖的地三方包,称为项目依赖
  • 使用 npm install 包名命令下载的文件会默认被添加到package.json文件的dependencies字段中
{
  "dependencies": {
    "jquery": "^3.3.1"
  }
}

六、开发依赖

  • 在项目的开发阶段需要依赖,线上运营不需要依赖的第三方包,称为开发依赖
  • 使用npm install 包名 --save-dev命令将包添加到package.json文件的devDepend
{
  "devDependencies": {
    "dulp": "^3.9.1"
  }
}

package-lock.json文件的作用

记录模块与模块之间的关系

  • 锁定包的版本,确保再次下载时不会因为包版本不同而产生问题
  • 加快下载速度,因为该文件中已经记录了项目所依赖第三方包的树状结构和包的下载地址,重新安装只需下载即可,不需要做额外的工作

七、Node.js中模块的加载机制

5.1 模块查找规则-当模块拥有路径没有后缀时

require('./find.js');

1. require方法根据模块路径查找模块,如果是完整路径,直接引入模块

require('./find');

2. 如果模块后缀省略,先找同名JS文件再找同名JS文件夹

3. 如果找到了同名文件夹,找文件夹中的index.js

4. 如果文件夹中没有index.js就会去当前文件夹中的package.js文件中查找main选项中的入口文件

5. 如果找指定的入口文件不存在或者没有指定入口文件就会报错,模块没有被找到

5.2 模块查找规则-当模块没有路径没有后缀时

require('find');

  1. Node.js会假设他是系统模块
  2. Node.js会去node_modules文件夹中
  3. 首先看是否有该名字的JS文件
  4. 再看是否有该名字的文件夹
  5. 如果是文件夹看里面是否有index.js
  6. 如果没有index.js查看文件夹中的package.json中的main选项确定模块入口文件
  7. 否则找不到报错
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Node】package.json文件 的相关文章

随机推荐

  • redis锁

    一 redis锁的实现 加锁命令 SETNX key value 当键不存在时 对键进行设置操作并返回成功1 否则返回失败0 Key是锁的唯一标识 一般按业务来决定命名 Value 往往用来比较加锁的是哪一个线程或者哪一个消息 一般使用UU
  • 开源的MiniGPT-4可以让你提前体验一下GPT-4的魅力

    多模态GPT 4大模型的发布 让很多人看到了AI人工智能的魅力 特别是ChatGPT的流行 让很多人开始关注人工智能 虽然ChatGPT可以通过一些魔法进行使用 但是GPT 4多模态大模型 openai却没有完全免费开放给个人 要想使用GP
  • Android系统启动流程 源码解析

    Android系统启动流程 本文链接 https blog csdn net feather wch article details 132518105 有道云脑图 https note youdao com s GZ9d8vzO 1 整体
  • Java中的定时任务应用

    一 使用Java的Timer import java text ParseException import java text SimpleDateFormat import java util Date import java util
  • 安装Altium Designer 2022版本步骤含阿里网盘安装包(不限速)

    Altium designer 学习笔记第一篇 安装Altium Designer2022步骤及阿里网盘安装包 不限速 一 安装包链接 https www aliyundrive com s e85bUWKU45N 提取码 jd63 注 若
  • 数据结构 - 二叉树

    文章目录 目录 文章目录 前言 一 树型结构 1 1 树的概念 了解 1 2 数的常用术语 掌握 1 3 树的应用 了解 1 4 树相较于数组和链表的优势 了解 二 二叉树 重点 2 1 二叉树的概念 2 2 两种特殊的二叉树 2 3 二叉
  • 基于LLMs的多模态大模型(PALM-E,ArtGPT-4,VPGTrans )

    这个系列已经更文一些了 如果有新的文章会继续补充 基于LLMs的多模态大模型 Visual ChatGPT PICa MM REACT MAGIC 基于LLMs的多模态大模型 Flamingo BLIP 2 KOSMOS 1 基于LLMs的
  • Spring Boot集成OpenLdap 进行权限验证

    一 搭建openldap 搭建openldap可以有多种方式进行 1 可以去官网下载源码包 自行编译 安装 2 可以使用docker进行安装 这边主要介绍使用docker安装openldap 参考文章 https blog csdn net
  • FastSpeech2论文中文翻译

    FastSpeech2 论文的翻译 翻译的挺差的 大概是那意思 只翻译了摘要 模型部分和实验部分 摘要 高级的TTS模型像fastspeech 能够显著更快地合成语音相较于之前的自回归模型 而且质量相当 FastSpeech模型的训练依赖于
  • Linux下libxml库编程(-)

    http leansmall blog 163 com blog static 51617691200811171530183 1 编写说明 本文档主要介绍XML的基本知识及如何利用libxml来操作xml文件 2 XML基础 XML是eX
  • Telegram死循环(已解决)

    简介 Telegram 中文叫做电报 作为一款安全的 轻量级的即时通讯软件 是我们在进行国际通信 与外国友人或者身处外地的游子的一种通讯选择 但是这个软件有一个 BUG 就是如果我们之前已经在一台设备上登陆过自己的账号 那么如果再次登录的时
  • 23.8.16.git clone -b branchName http://xx.xx.x.x.xx.git解析

    git clone 表示使用git克隆远程仓库代码 b 这是branch的简写 代表分支的意思 branchName 代表远程仓库的分支名 也就是要克隆的指定分支名 http xx xx x x xx git 这是远程仓库的url地址
  • Vue3 -- 自定义指令directive

    目录 自定义指令directive 局部自定义指令 全局自定义指令 自定义指令动态参数 函数简写 传参给自定义指令 总结 自定义指令directive 在Vue中除了像v model 和 v show这样的默认内置的指令外 Vue 也允许注
  • go语言实战-----27-----mysql增删改查、预处理、事务、第三方库sqlx

    一 mysql增删改查 Mysql准备工作 首先我们建库建表 以方便进行测试 运行下面sql文件 CREATE DATABASE IF NOT EXISTS go test use go test CREATE TABLE user id
  • 2022年广东省中职组“网络空间安全”赛题及赛题解析(超详细)

    2022年广东省中职组 网络空间安全 赛项模块B解析 2022年中职组广东省区竞赛任务书 模块 B 基础设施设置与安全加固 1000分 B 1 Apache安全配置 B 2 隐写术应用 B 3 Python程序渗透 B 4 代码渗透测试 B
  • Pandas 之 过滤DateFrame中所有小于0的值并替换

    Outline 前几天 数据清洗时有用到pandas去过滤大量数据中的 负值 把过滤出来的 负值 替换为 NaN 或者指定的值 故做个小记录 读取CSV文件 代码 import pandas as pd import numpy as np
  • 万能指针:void * 指针

    背景 最近看到void 类型的指针不知道该怎么处理 特别学习一下 适用语言 C C 当中都可以使用 但就目前认知水平 C当中用的较为普遍一些 void 指针的机制 指针从某种程度上来说 无非就是一个地址 它的类型只是用于说明数据结构的 指针
  • RISC-V指令集是一种精简的、可编程的指令集,它主要用于实现各种复杂的数据处理与控制任务。它提供了一系列简单的、可编程的指令,可以用来实现复杂的操作,比如addi指令,它可以将一个常数(如0x1)加...

    RISC V指令集是一种精简可编程的指令集 可以用来实现复杂的数据处理和控制操作 它提供了一系列简单可编程的指令 例如addi指令 它可以将一个常数加到寄存器中 并将结果存储到另一个寄存器中 从而实现特定的操作
  • 小白学Linux之#pragma的用法

    预编译指令 pragma的用法 最近在看开源项目中的代码时 发现许多地方都用到了 pragma的程序 因此 就问了下谷歌老师 总结了下 pragma预编译指令的常用用法 现在和大家分享下 一 pragma最常用的方法 1 progma pa
  • 【Node】package.json文件

    package json 文件详解前言一 package json 文件作用二 package json 文件创建三 package json 文件示例四 package json 文件配置说明 五 项目依赖 六 开发依赖 七 Node j