package.json
每一个项目都要有一个package.json 文件(包括描述文件,就像产品说明书一样)
这个文件可以通过npm init 自动初始化出来
D:\code\node中的模块系统>npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.
See `npm help json` for definitive documentation on these fields
and exactly what they do.
Use `npm install <pkg>` afterwards to install a package and
save it as a dependency in the package.json file.
Press ^C at any time to quit.
package name: (node中的模块系统)
Sorry, name can only contain URL-friendly characters.
package name: (node中的模块系统) cls
version: (1.0.0)
description: 这是一个测试项目
entry point: (main.js)
test command:
git repository:
keywords:
author: xiaochen
license: (ISC)
About to write to D:\code\node中的模块系统\package.json:
{
"name": "cls",
"version": "1.0.0",
"description": "这是一个测试项目",
"main": "main.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "xiaochen",
"license": "ISC"
}
Is this OK? (yes) yes
对于目前来讲,最有用的是dependencies选项,可以用来帮助我们保存第三方包的依赖信息
如果 node_modules 删除了也不用担心,只需要在控制面板中 npm install 就会自动吧package.json中的dependencies 中所有的依赖项全部都下载回来
- 建议每个项目的根目录下都有一个package.json文件
- 建议执行npm install 包名的时候都加上 --save 选项,目的是用来保存依赖信息
package.json和package-lock.json
npm 5 以前是不会有package-lock.json这个文件
npm 5 以后才加入这个文件
当你安装包的时候,npm 都会生成或者更新 package-lock.json 这个文件
- npm5以后的版本安装都不要加 --save 参数,他会自动保存依赖信息
- 当你安装包的时候,会自动创建或者更新 package-lock.json 文件
- package-lock.json 这个文件会包含 node_modules 中所有包的信息(版本,下载地址。。。。)
- 这样的话重新npm install 的时候速度就可以提升
- 从文件来看,有一个lock称之为锁
- 这个lock 使用来锁版本
- 如果项目依赖了1.1.1版本
- 如果你重新install其实会下载最新版本,文不是1.1.1
- package-lock.json 的另外一个作用就是锁定版本号,防止自动升级
path路径操作模块
参考文档: https://nodejs.org/docs/latest-v13.x/api/path.html.
- path.basename:获取路径的文件名,默认包含扩展名
- path.dirname:获取路径中的目录部分
- path.extname:获取一个路径中的扩展名部分
- path.parse:把路径转换为对象
- root:根路径
- dir:目录
- base:包含后缀名的文件名
- ext:后缀名
- name:不包含后缀名的文件名
- path.join:拼接路径
- path.isAbsolute:判断一个路径是否为绝对路径
Node中的其他成员(_dirname,_filename)
每个模块中,除了require,exprots 等模块相关的API之外,还有两个特殊的成员:
- _dirname , 是一个成员,可以用来动态获取当前文件所属目录的绝对路径
- _filename, 可以用来动态的获取当前文件的绝对路径
- _dirname 和filename 是不受执行node命令所属路径影响的
在文件操作中,使用相对路径是不可靠的,因为node中文件操作的路径别设计为相对于执行node命令所处的路径
所以为了了解这个问题,只需要把相对路径变为绝对路径(绝对路径不收任何影响)就可以了
就可以使用_dirname 或者 _filename 来帮助我们解决这个问题
在拼接路径的过程中,为了米面手动凭借带来的一些低级错误,推荐使用path.json()来辅助拼接
var fs = require('fs');
var path = require('path');
// console.log(__dirname + 'a.txt');
// path.join方法会将文件操作中的相对路径都统一的转为动态的绝对路径
fs.readFile(path.join(__dirname + '/a.txt'),'utf8',function(err,data){
if(err){
throw err
}
console.log(data);
});
// 补充:模块中的路径标识和这里的路径没关系,不受影响(就是党对于文件模块)
// 注意:模块中的路径标识和文件操作中的相对路径标识不一致
// 模块中的路径标识就是相对于当前文件模块,不受node命令所处路径影响