【node.js】看这一篇就够了!标准node项目文件和项目执行过程简要分析

您所在的位置:网站首页 js运行方式 【node.js】看这一篇就够了!标准node项目文件和项目执行过程简要分析

【node.js】看这一篇就够了!标准node项目文件和项目执行过程简要分析

2023-08-13 07:14| 来源: 网络整理| 查看: 265

写在前面:大家好K。首先为你点进这篇有趣的文章点赞👍!文章在撰写过程中难免有疏漏和错误,欢迎你在下方留言指出文章的不足之处;如果觉得这篇文章对你有用,也欢迎你点赞和留下你的评论。更多内容请点进👉我的博客K。👈阅览。

文章目录 1. node项目原始目录结构1.1 package.json文件1.2 package-lock.json文件 2. 项目执行过程简要分析

1. node项目原始目录结构 . ├── XXX.js ├── node_modules │ ├── express │ │ └── XXX.XX │ └── XXX │ └── XXX.XX ├── package-lock.json └── package.json

一个标准的node项目有这几个部分:

XXX.js源代码文件:开发者主要写的代码文件;

node_modules模块目录:里面存放了当前项目使用的模块文件;

package.json项目配置文件:里面存放了项目的基本信息和配置信息;

package-lock.json模块记忆文件:里面存放了所需要的模块包括依赖模块的详细信息,在二次安装时按照该此文件中所指版本和下载路径下载安装。

模块目录node_modules中个模块的结构和当前目录结构相同,因为每个模块都是一个node项目

1.1 package.json文件

使用npm init在空文件夹中即可创建该文件,此文件夹即为node项目根目录

文件内容示例:

{ "name": "test", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo 'Hello, world'" }, "author": "", "license": "ISC", "dependencies": { "express": "^4.17.1" } }

里面有项目名称、版本号、描述、作者、遵循的协议类型等,这些字段为基本信息。

协议的license文件,如果有,则放在项目根目录中。

main字段

该键的值就是整个项目的起始文件名,整个项目从该文件启动。类似于html文件中的index.html。

script字段

阮一峰博客详细说明

因为是json文件,所以两边的键和值都用双引号包含(这里键名和值都是字符串)。

这些定义在package.json里面的脚本,就称为 npm 脚本,当在命令行输入npm 键名时,就会执行值的shell命令,如上示例:

# 输入 npm run test # 实际执行的是test键对应的值 echo 'Hello, world' # 所以输出 Hello, world

输出示例

当然值是shell命令,所以shell中所有操作都可以写在这里,如各种文件操作、服务操作等。且每次执行脚本,npm是新建子shell在里面执行,几乎不影响当前shell。

当然可以弄一个键值对"start": XXX来执行启动时各种操作(需要安装run模块)。此时npm run start可缩写成npm start。如: "start": "node ."

之后可以通过npm start启动项目。还有npm start、npm stop、npm restart。

在子shell启动时,npm会自动临时将node_modules/.bin加到环境变量中,所以可以通过文件名直接运行node_modules/.bin中的脚本。

钩子。如果某键名是XXX,且还有键名preXXX或postXXX,当执行npm run XXX时,会按照npm run preXXX && npm run XXX && npm run XXX依次执行,如有三个键值对:

"preprint": "echo 'pre'", "print": "echo 'ok'", "postprint": "echo 'post'"

执行npm run print时会依次执行echo 'pre'、echo 'ok'和echo 'post'

支持通配符。在写值的shell命令时,注意可能需要转义。

npm run多条命令连接时,如果希望当前一命令执行失败时立马停止,那么用&&连接多条命令。否则用单&连接。

变量。以npm_package_开头,可以获取此文件package.json的各字段。如果在值的shell命令中使用,则加上$:

"test": "echo $npm_package_main"

则执行npm run test时,会输出index.js。

若想访问键中的键(嵌套),则继续用下划线_连接,如npm_package_dependencies_express的值为^4.17.1

dependencies字段

这里只放了用到的第三方模块名和版本号,相对package-lock.json文件中的更简略。并未存放该模块所依赖的其他模块的信息。

格式为:

"模块名": "支持版本号"

支持版本号有三种表示,如:

"~x.y.z",表示固定x,y两个号码值,不低于z的版本。例~1.2.3表示,只能安装高于1.2.3(含)低于1.3.0(不含)的版本;

^x,y,x,表示固定x值,不低于y.z的版本。例^1.2.3表示,只能安装高于1.2.3(含)低于2.0.0(不含)的版本;

latest:安装最新版本。

1.2 package-lock.json文件

使用npm安装时加上-S或--save来自动创建、写入该文件。(新版的npm可不手动加此选项,默认自动保存)

例如第一次安装express模块是使用命令npm install -S express。因为express也有它自己的依赖,它的依赖又会有其他依赖(子子孙孙无穷尽也)。此时package-lock.json就会保存所有这些依赖的信息,如版本号、下载地址、校验码等。

优点:

固定版本号。如果不保存,当二次安装模块时,别的依赖包可能会更新,所以目的之一是固定依赖模块的版本号,减少版本引起的错误。

固定下载地址。第一次安装时是一层一层找依赖(依赖包的依赖包,子子孙孙无穷尽也)找下去安装的。这时找依赖的过程就会消耗大量的时间,该json文件保存了每个依赖包的下载地址,这样就能直接找到地址下载,提高了模块的安装速度。

2. 项目执行过程简要分析

主要分成两大部分三大步骤,前两步骤为项目的预操作,下载安装各模块和执行启动脚本。之后才是项目的主要部分。下面是简要过程:

当拿到一个node项目时,第一步先执行npm install安装需要的模块,此时就需要读取package.json和package-lock.json里的内容,package-lock.json中存放了各依赖模块的下载地址信息和版本信息,可以帮助提高安装模块速度。

运行npm start启动项目,启动脚本的具体内容放在package.json的script字段中,然后重点读取package.json中的main字段信息,这里存放了项目起始的js脚本,整个项目从该文件开始执行。

项目各模块(node中每个文件即为一个模块)之间通过export、require等关键字以及共享数据进行沟通交互。



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3