Heim  >  Artikel  >  Web-Frontend  >  In diesem Artikel erfahren Sie, wie Sie package.json in nodejs verstehen

In diesem Artikel erfahren Sie, wie Sie package.json in nodejs verstehen

青灯夜游
青灯夜游nach vorne
2021-07-15 18:16:575128Durchsuche

Dieser Artikel führt Sie durch die Datei package.json im Projekt Node.js, ihre Funktion, die Erstellungsmethode, die Verwaltung von package.json und den Unterschied zwischen package.json und package-lock.json.

In diesem Artikel erfahren Sie, wie Sie package.json in nodejs verstehen

Mit der Entwicklung von Front-End-Engineering und -Automatisierung ist die modulare Entwicklung im aktuellen Front-End zu einem Trend geworden, und in einem vollständigen Node.js-Projekt sind package.json-Dateien überall. Erstens befindet es sich im Stammverzeichnis des Projekts und zweitens erscheint es auch häufig in node_modules. Wozu dient diese Datei und welche Rolle spielt sie? Ich werde sie Ihnen heute offenbaren. [Empfohlene Studie: „nodejs Tutorial“]

Die Rolle der package.json-Datei

Wenn wir ein Node.js-Projekt erstellen, stoßen wir auf die package.json-Datei. Es handelt sich um eine JSON-Datei, die sich im Stammverzeichnis des Projekts befindet.

package.json enthält wichtige Informationen zum Projekt. Es enthält für Menschen lesbare Metadaten über das Projekt (wie den Projektnamen und die Beschreibung) sowie funktionale Metadaten (wie die Versionsnummer des Pakets und die Liste der vom Programm benötigten Abhängigkeiten). Beginnen wir mit dem Node.js-Modul.

In Node.js kann ein Modul eine Bibliothek oder ein Framework sein, oder es kann ein Node.js-Projekt sein. Das Node.js-Projekt folgt der modularen Architektur module Die Datei heißt package.json-Datei.

package.json ist eine sehr wichtige Konfigurationsdatei im Node.js-Projekt. Sie ist der Kern eines Projekts. Diese Datei verfolgt Abhängigkeiten und Metadaten, definiert verschiedene für das aktuelle Projekt erforderliche Module und die Konfigurationsinformationen des Projekts. Es handelt sich um eine Beschreibung des Projekts oder Modulpakets, die viele Metainformationen enthält.

Es definiert verschiedene Abhängigkeiten und Projektkonfigurationsinformationen, die zum Ausführen des Projekts erforderlich sind (z. B. Projektname, Projektversion, Projektausführungseintragsdatei, ausgeführte Skripte, abhängige Plug-Ins, Projektmitwirkende, Lizenzen sowie Betrieb, Entwicklung und erforderliche Informationen). Projekte selektiv auf npm veröffentlichen).

Es ist das Zentrum der Konfiguration und Beschreibung, wie Sie mit Ihrem Programm interagieren und es ausführen. Es wird von npm und Yarn verwendet, um Ihr Projekt zu identifizieren und zu verstehen, wie mit den Abhängigkeiten des Projekts umgegangen wird.

npm cli ist auch die beste Möglichkeit, package.json zu verwalten, da es dabei hilft, package.json-Dateien während des gesamten Lebenszyklus des Projekts zu generieren und zu aktualisieren. Die Datei package.json ist ein JSON-Objekt und jedes Mitglied des Objekts ist eine Einstellung des aktuellen Projekts.

package.json spielt im Lebenszyklus des Projekts mehrere Rollen, von denen einige nur für auf npm veröffentlichte Pakete gelten. Es kann Ihr Projekt starten, Skripte ausführen, Abhängigkeiten installieren, in der npm-Registrierung veröffentlichen und vieles mehr Aufgaben. . Auch wenn Sie Ihr Projekt nicht in der npm-Registrierung veröffentlichen oder es anderen nicht öffentlich zugänglich machen, ist Ihre package.json dennoch von entscheidender Bedeutung für den Entwicklungsprozess.

Ihr Projekt muss auch package.json enthalten, bevor Sie Pakete von npm installieren können. Dies ist einer der Hauptgründe, warum Sie es in Ihrem Projekt benötigen.

Der Befehl npm install lädt alle abhängigen Module basierend auf dieser Datei herunter. package.json befindet sich im Allgemeinen im Stammverzeichnis des Projekts.

package.json-Dateierstellung Es gibt zwei Möglichkeiten,

package.json-Dateien zu erstellen: manuelle Erstellung und automatische Erstellung Im Allgemeinen verwenden wir eher die automatische Erstellung.

1. Erstellen Sie manuell

Erstellen Sie das Projektverzeichnis

$mkdir node-demo>cd node-demo>touch package.json

Erstellen Sie eine neue package.json-Datei direkt im Projektstammverzeichnis und geben Sie dann den relevanten Inhalt ein.

{
  "name": "express-admin",
  "version": "1.0.0",
  "description": "Express Admin",
  "keywords": [
    "server",
    "express",
    "compression"
  ],
  "homepage":"https://gitee.com/xunzhaotech/express-admin.git",
  "bugs":"https://github.com/owner/project/issues",
  "license": "MIT",
  "author": {
    "name": "Amber luyb",
    "email": "luyb@xunzhaotech.com",
    "url": "https://www.xunzhaotech.com"
  },
  "contributors": [
    {
      "name": "Amber luyb",
      "email": "luyb@xunzhaotech.com",
      "url": "https://gitee.com/xunzhaotech/express-admin.git"
    }
  ],
  "funding": [
    {
      "type" : "individual",
      "url" : "http://example.com/donate"
    },
    "http://example.com/donateAlso",
    {
      "type" : "patreon",
      "url" : "https://www.patreon.com/my-account"
    }
  ],
  "files":[".git",
    "CVS",
    ".svn",
    ".hg",
    ".lock-wscript",
    ".wafpickle-N",
    ".*.swp",
    ".DS_Store",
    "._*",
    "npm-debug.log",
    ".npmrc",
    "node_modules",
    "config.gypi",
    "*.orig,"],
  "main": "index.js",
  "browser":"",
  "bin": {
    "myapp": "./cli.js"
  },
  "man": [
    "./man/foo.1",
    "./man/bar.1"
  ],
  "repository": {
    "type": "git",
    "url": "https://gitee.com/xunzhaotech/express-admin.git"
  },
  "scripts": {
    "docs:dev": "vuepress dev docs",
    "docs:build": "vuepress build docs",
    "server": "node server.js",
    "start": "node index.js",
    "dev": "nodemon",
    "lint": "eslint **/*.js"
  },
  "config": {
    "port": "8080"
  },
  "devDependencies": {
    "eslint": "^7.22.0",
    "mockjs": "^1.1.0",
    "nodemon": "^2.0.7",
    "vuepress": "^1.8.2"
  },
  "dependencies": {
    "body-parser": "^1.19.0",
    "compression": "^1.7.4",
    "cookie-parser": "^1.4.5",
    "debug": "^4.3.1",
    "express": "^4.17.1",
    "express-session": "^1.17.1"
  },
  "peerDependencies": {
    "tea": "2.x"
  },
  "peerDependenciesMeta": {
    "soy-milk": {
      "optional": true
    }
  },
  "bundledDependencies": [
    "renderized",
    "super-streams"
  ],
  "optionalDependencies":{},
  "engines": {
    "npm": "~1.0.20"
  },
  "os": [
    "darwin",
    "linux"
  ],
  "cpu": [
    "!arm",
    "!mips"
  ],
  "private": false,
  "publishConfig":{},
  "workspaces": [
    "./packages/*"
  ]
}

2. Automatisch erstellen

Wenn wir ein neues mit dem Namen xz-nuxt-admin, 在项目根目录下执行 yarn init -ynpm init -y 命令后,也可以输入 npm inityarn init -y erstellen, verwendet dieser Befehl eine interaktive Methode, bei der der Benutzer einige Fragen beantworten und dann den entsprechenden Inhalt gemäß den Eingabeaufforderungen Schritt für Schritt eingeben muss . Nach Abschluss wird es im Projektverzeichnis angezeigt. Fügen Sie eine Basisdatei package.json hinzu. Von allen Fragen sind nur der Projektname (Name) und die Projektversion (Version) erforderlich, die anderen sind optional. Der Inhalt lautet wie folgt: Beschreibung der Konfigurationsdatei „package.json“

npm

und andere Einige helfen der npm-CLI, Anwendungen auszuführen oder Abhängigkeiten zu installieren. Es gibt tatsächlich mehr Felder, als wir abgedeckt haben, und Sie können den Rest in der Dokumentation erfahren, aber im Folgenden sind die package.json-Eigenschaften aufgeführt, die Sie kennen müssen.

1、必须字段

package.json 中有非常多的配置项,其中必须填写的两个字段分别是 name 字段和 version 字段,它们是组成一个 npm 模块的唯一标识。

name

name 字段定义了模块的名称,其命名时需要遵循官方的一些规范和建议:

  • 项目/模块名称,长度必须小于等于214个字符,不能以"."(点)或者"_"(下划线)开头,不能包含大写字母。
  • 模块名会成为模块 url、命令行中的一个参数或者一个文件夹名称,任何非 url 安全的字符在模块名中都不能使用(我们可以使用 validate-npm-package-name 包来检测模块名是否合法)。
  • 语义化模块名,可以帮助开发者更快的找到需要的模块,并且避免意外获取错误的模块;
  • 若模块名称中存在一些符号,将符号去除后不得与现有的模块名重复。

name 字段不能与其他模块名重复,我们可以执行以下命令查看模块名是否已经被使用:npm view 3dc77a3840d1fe4f8d7a0f0a6f003876或者,我们也可以去 npm 上输入模块名,如果搜不到,则可以使用该模块名。

version

  • 在package.json文件中,版本是非常重要的一个概念,npm 包中的模块版本都需要遵循 SemVer 规范,该规范的标准版本号采用 X.Y.Z 的格式,其中 X、Y 和 Z 均为非负的整数,且禁止在数字前方补零:
  • X 是主版本号(major):第一位就是主要版本号。一般来说,重大功能的更新,或功能的添加又不能向后兼容的情况会提升该版本号。
  • Y 是次版本号(minor):中间那一位是指次要版本号。一般来说,一些功能的添加,但又能向后兼容,这种更新会提升该版本号。
  • Z 是修订号(patch):最后一位就是补丁版本号。一般来说,如果是项目的一些BUG修复,会将该版本号提升。

当某个版本改动比较大、并非稳定而且可能无法满足预期的兼容性需求时,我们可能要先发布一个先行版本。

先行版本号可以加到主版本号.次版本号.修订号的后面,通过 - 号连接一连串以句点分隔的标识符和版本编译信息:

  • 内部版本(alpha)
  • 公测版本(beta)
  • 正式版本的候选版本rc(即 Release candiate)

我们可以执行以下命令查看模块的版本:

$npm view <packageName> version  # 查看某个模块的最新版本
$npm view <packageName> versions # 查看某个模块的所有历史版本

2、可选字段

可选字段是除去必填字段需要补充的项目信息

描述信息(description & keywords)

  • description:字段用于添加模块的描述信息,便于用户了解该模块,是一个字符串。它可以帮助人们在使用npm search时找到这个包。
  • keywords 项目关键字,是一个字符串数组。用于给模块添加关键字。它可以帮助人们在使用npm search时找到这个包。
  • 当我们使用 npm 检索模块时,会对模块中的 description 字段和 keywords 字段进行匹配,写好 package.json中的 description 和 keywords 将有利于增加我们模块的曝光率。

安装项目依赖(dependencies & devDependencies)

  • dependencies:字段指定了项目运行所依赖的模块(生产环境下,项目运行所需依赖)。
  • devDependencies:指定项目开发所需要的模块(开发环境下,项目所需依赖)。

说明:

我们在使用vue框架开发一个程序,开发阶段需要用到webpack来构建你的开发和本地运行环境。所以vue一定要放到dependencies里,因为以后程序到生产环境也要用。webpack则是你用来压缩代码,打包等需要的工具,程序实际运行的时候并不需要,所以放到devDependencies里就可以了。或者我们在写程序要用ES6标准,浏览器并不完全支持,所以你要用到babel来转换代码,babel放devDependencies。程序里有用到开源组件,比如你想用antd,antd要放dependencies。

简化终端命令(scripts)

scripts 字段是 package.json 中的一种元数据功能,它接受一个对象,对象的属性为可以通过 npm run 运行的脚本,值为实际运行的命令(通常是终端命令),如:

  "scripts": {
     "dev": "nuxt",
     "build": "nuxt build",
     "start": "nuxt start",
     "generate": "nuxt generate"
 },

将终端命令放入 scripts 字段,既可以记录它们又可以实现轻松重用。

定义项目入口(main)

main 字段是 package.json 中的另一种元数据功能,它可以用来指定加载的入口文件。假如你的项目是一个 npm 包,当用户安装你的包后,const ModuleName = require('module-name') 返回的是 main 字段中所列出文件的 module.exports 属性。当不指定main 字段时,默认值是模块根目录下面的index.js 文件。

发布文件配置(files)

files 字段用于描述我们使用 npm publish 命令后推送到 npm 服务器的文件列表,如果指定文件夹,则文件夹内的所有内容都会包含进来。我们可以查看下载的 antd 的 package.json 的files 字段,内容如下:

"files": [
   "dist",
   "lib",
   "es"
    ……
],

可以看到下载后的 antd 包是下面的目录结构中包含了  /dist/"lib/es文件,另外,我们还可以通过配置一个 .npmignore 文件来排除一些文件, 防止大量的垃圾文件推送到 npm 上。

定义私有模块(private)

一般公司的非开源项目,都会设置 private 属性的值为 true,这是因为 npm 拒绝发布私有模块,通过设置该字段可以防止私有模块被无意间发布出去。

指定模块适用系统(os)

使用 os 属性可以指定模块适用系统的系统,或者指定不能安装的系统黑名单(当在系统黑名单中的系统中安装模块则会报错)

"os" : [ "darwin", "linux" ] # 适用系统
"os" : [ "!win32" ] # 黑名单

在 node 环境下可以使用 process.platform 来判断操作系统

指定模块适用 cpu 架构(cpu)

我们可以用 cpu 字段更精准的限制用户安装环境

"cpu" : [ "x64", "ia32" ] # 适用 cpu
"cpu" : [ "!arm", "!mips" ] # 黑名单

在 node 环境下可以使用 process.arch 来判断 cpu 架构

指定项目 node 版本(engines)

防止因node 版本不同,导致会出现很多奇奇怪怪的问题(如某些依赖安装报错、依赖安装完项目跑不起来等)。

"engines": {
  "node": ">= 8.16.0",
  "npm": ">= 6.9.0"
},

需要注意的是,engines属性仅起到一个说明的作用,当用户版本不符合指定值时也不影响依赖的安装

自定义命令(bin)

bin 字段用来指定各个内部命令对应的可执行文件的位置。主要应用在脚手架搭建中,当package.json 提供了 bin 字段后,即相当于做了一个命令名和本地文件名的映射。 当用户安装带有 bin 字段的包时,

  • 如果是全局安装,npm 将会使用符号链接把这些文件链接到/usr/local/node_modules/.bin/;
  • 如果是本地安装,会链接到./node_modules/.bin/。

如果要使用 mfd-cli 作为命令时,可以配置以下 bin 字段:

"bin": {
  "mfd-cli": "./bin/cli.js"
  }

上面代码指定,mfd-cli 命令对应的可执行文件为 bin 子目录下的 cli.js,因此在安装了 mfd-cli 包的项目中,就可以很方便地利用 npm执行脚本:

"scripts": {
    start: &#39;node node_modules/.bin/mfd-cli&#39;
 }

这里看起来和 vue create/create-react-app之类的命令不太一样?是因为:当需要 node 环境时就需要加上 node 前缀如果加上 node 前缀,就需要指定mfd-cli 的路径 -> node_modules/.bin,否则 node mfd-cli会去查找当前路径下的 mfd-cli.js,这样肯定是不对。若要实现像 vue create/create-react-app之类的命令一样简便的方式,则可以在上文提到的 bin 子目录下可执行文件cli.js 中的第一行写入以下命令:#!/usr/bin/env node这行命令的作用是告诉系统用 node 解析,这样命令就可以简写成 mfd-cli 了。

设置应用根路径(homepage)

当我们使用 create-react-app 脚手架搭建的 React 项目,默认是使用内置的 webpack 配置,当package.json 中不配置 homepage 属性时,build 打包之后的文件资源应用路径默认是/

一般来说,我们打包的静态资源会部署在 CDN 上,为了让我们的应用知道去哪里加载资源,则需要我们设置一个根路径,这时可以通过 package.json 中的 homepage 字段设置应用的根路径。

当我们设置了 homepage 属性后:

{
    "homepage": "https://xxxx.cdn/project-name",
}

打包后的资源路径就会加上 homepage 的地址:/project-name/bundle.js

Andere Konfigurationen

  • Autor: Projektentwickler, sein Wert ist Ihr gültiger Kontoname auf der Website npmjs.org, entsprechend der Regel „Kontoname f9f4cc2859a7bdb79edcd9213be8fba4“, zum Beispiel: xunzhaotech@aliyun.com.
  • private: Gibt an, ob es privat ist. Wenn es auf „true“ gesetzt ist, verweigert npm die Veröffentlichung.
  • Lizenz: Softwarelizenzbedingungen, um Benutzer über ihre Nutzungsrechte und -beschränkungen zu informieren.
  • bugs: Adresse für die Fehlerübermittlung.
  • Mitwirkende: Projektmitwirkende.
  • repository: Projektlageradresse.
  • Modul: Es wird modular im ES-Modul (d. h. ES6) geladen, denn in den frühen Tagen, als es noch keine modulare ES6-Lösung gab, folgte alles der CommonJS-Spezifikation und das Paket der CommonJS-Spezifikation drückte den Eintrag aus Zur Unterscheidung wird die Modulmethode hinzugefügt. Die modulare ES6-Lösung ist jedoch effizienter. Sie prüft daher zunächst, ob ein Modulfeld vorhanden ist, und verwendet nur das Hauptfeld, wenn nicht.
  • eslintConfig: EsLint prüft die Dateikonfiguration und liest automatisch die Verifizierung.
  • Browserliste: Eine Liste der Versionen, die von Browsern verwendet werden können.
  • Stil: Der Speicherort der Stildatei bei Verwendung durch den Browser; das Paketierungstool für Stildateien, packetify, kennt den Verpackungsort der Stildatei.

Der Unterschied zwischen package.json und package-lock.json

Warum benötigen Sie die Datei package-lock.json, wenn Sie package.json haben? Sie wird benötigt, wenn der Ordner node_modules nicht vorhanden ist oder gelöscht wurde . Wenn npm install alle Abhängigkeiten neu lädt, können die Download-Adresse und die zugehörigen Abhängigkeiten direkt über package-lock.json angezeigt werden. Die Download-Geschwindigkeit ist ebenfalls schneller und es ist nicht einfach, Fehler zu melden.

Weitere Kenntnisse zum Thema Programmierung finden Sie unter: Programmiervideos! !

Das obige ist der detaillierte Inhalt vonIn diesem Artikel erfahren Sie, wie Sie package.json in nodejs verstehen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:掘金--快智岛. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen