Heim >Web-Frontend >js-Tutorial >In diesem Artikel erfahren Sie, wie Sie package.json in nodejs verstehen
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.
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“]
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-Dateien zu erstellen: manuelle Erstellung und automatische Erstellung Im Allgemeinen verwenden wir eher die automatische Erstellung.
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/*" ] }
Wenn wir ein neues mit dem Namen xz-nuxt-admin
, 在项目根目录下执行 yarn init -y
或 npm init -y
命令后,也可以输入 npm init
或yarn 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“
package.json 中有非常多的配置项,其中必须填写的两个字段分别是 name 字段和 version 字段,它们是组成一个 npm 模块的唯一标识。
name 字段定义了模块的名称,其命名时需要遵循官方的一些规范和建议:
name 字段不能与其他模块名重复,我们可以执行以下命令查看模块名是否已经被使用:
npm view 3dc77a3840d1fe4f8d7a0f0a6f003876
或者,我们也可以去 npm 上输入模块名,如果搜不到,则可以使用该模块名。
当某个版本改动比较大、并非稳定而且可能无法满足预期的兼容性需求时,我们可能要先发布一个先行版本。
先行版本号可以加到主版本号.次版本号.修订号的后面,通过 - 号连接一连串以句点分隔的标识符和版本编译信息:
我们可以执行以下命令查看模块的版本:
$npm view <packageName> version # 查看某个模块的最新版本 $npm view <packageName> versions # 查看某个模块的所有历史版本
可选字段是除去必填字段需要补充的项目信息
说明:
我们在使用vue框架开发一个程序,开发阶段需要用到webpack来构建你的开发和本地运行环境。所以vue一定要放到dependencies里,因为以后程序到生产环境也要用。webpack则是你用来压缩代码,打包等需要的工具,程序实际运行的时候并不需要,所以放到devDependencies里就可以了。或者我们在写程序要用ES6标准,浏览器并不完全支持,所以你要用到babel来转换代码,babel放devDependencies。程序里有用到开源组件,比如你想用antd,antd要放dependencies。
scripts 字段是 package.json 中的一种元数据功能,它接受一个对象,对象的属性为可以通过 npm run 运行的脚本,值为实际运行的命令(通常是终端命令),如:
"scripts": { "dev": "nuxt", "build": "nuxt build", "start": "nuxt start", "generate": "nuxt generate" },
将终端命令放入 scripts 字段,既可以记录它们又可以实现轻松重用。
main 字段是 package.json 中的另一种元数据功能,它可以用来指定加载的入口文件。假如你的项目是一个 npm 包,当用户安装你的包后,const ModuleName = require('module-name') 返回的是 main 字段中所列出文件的 module.exports 属性。当不指定main 字段时,默认值是模块根目录下面的index.js 文件。
files 字段用于描述我们使用 npm publish 命令后推送到 npm 服务器的文件列表,如果指定文件夹,则文件夹内的所有内容都会包含进来。我们可以查看下载的 antd 的 package.json 的files 字段,内容如下:
"files": [ "dist", "lib", "es" …… ],
可以看到下载后的 antd 包是下面的目录结构中包含了 /dist/"lib/es文件,另外,我们还可以通过配置一个 .npmignore 文件来排除一些文件, 防止大量的垃圾文件推送到 npm 上。
一般公司的非开源项目,都会设置 private 属性的值为 true,这是因为 npm 拒绝发布私有模块,通过设置该字段可以防止私有模块被无意间发布出去。
使用 os 属性可以指定模块适用系统的系统,或者指定不能安装的系统黑名单(当在系统黑名单中的系统中安装模块则会报错)
"os" : [ "darwin", "linux" ] # 适用系统 "os" : [ "!win32" ] # 黑名单
在 node 环境下可以使用 process.platform 来判断操作系统
我们可以用 cpu 字段更精准的限制用户安装环境
"cpu" : [ "x64", "ia32" ] # 适用 cpu "cpu" : [ "!arm", "!mips" ] # 黑名单
在 node 环境下可以使用 process.arch 来判断 cpu 架构
防止因node 版本不同,导致会出现很多奇奇怪怪的问题(如某些依赖安装报错、依赖安装完项目跑不起来等)。
"engines": { "node": ">= 8.16.0", "npm": ">= 6.9.0" },
需要注意的是,engines属性仅起到一个说明的作用,当用户版本不符合指定值时也不影响依赖的安装
bin 字段用来指定各个内部命令对应的可执行文件的位置。主要应用在脚手架搭建中,当package.json 提供了 bin 字段后,即相当于做了一个命令名和本地文件名的映射。 当用户安装带有 bin 字段的包时,
如果要使用 mfd-cli 作为命令时,可以配置以下 bin 字段:
"bin": { "mfd-cli": "./bin/cli.js" }
上面代码指定,mfd-cli 命令对应的可执行文件为 bin 子目录下的 cli.js,因此在安装了 mfd-cli 包的项目中,就可以很方便地利用 npm执行脚本:
"scripts": { start: 'node node_modules/.bin/mfd-cli' }
这里看起来和 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 了。
当我们使用 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
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!