在Node.js中,模块是一个库或框架,也是一个Node.js项目。Node.js项目遵循模块化的架构,当我们创建了一个Node.js项目,意味着创建了一个模块,这个模块的描述文件,被称为package.json
。
package.json
包含了所在项目的配置信息,如:版本、描述、作者、运行依赖、打包依赖、运行脚本、环境说明等等。npm init
可以自动生产层基础配置
Scripts
可通过npm run
执行的脚本命令,如npm run start, npm run test
。脚本命令为node命令或shell命令
"scripts": {
"start": "node index.js",
"test": "echo no test!"
}
dependencies, devDependencies
dependencies
定义项目运行时依赖的模块(由别的模块引用时需要与当前模块同时自动安装的三方模块),devDependencies
定义项目开发阶段所需要的模块
{
"dependencies": {
"browserify": "~13.0.0",
"karma-browserify": "~5.0.1"
}
}
- 指定版本:比如1.2.2,遵循“大版本.次要版本.小版本”的格式规定,安装时只安装指定版本。
- 波浪号(tilde)+指定版本:比如~1.2.2,表示安装1.2.x的最新版本(不低于1.2.2),但是不安装1.3.x,也就是说安装时不改变大版本号和次要版本号。
- 插入号(caret)+指定版本:比如ˆ1.2.2,表示安装1.x.x的最新版本(不低于1.2.2),但是不安装2.x.x,也就是说安装时不改变大版本号。需要注意的是,如果大版本号为0,则插入号的行为与波浪号相同,这是因为此时处于开发阶段,即使是次要版本号变动,也可能带来程序的不兼容。
- latest:安装最新版本。
npm install express --save
npm install express --save-dev
--save
安装时自动将此模块写入dependencies
,--save-dev
表示将模块写入devDependencies
main
main
字段指定了加载的入口文件(commonjs方式),require('moduleName')
就会加载这个文件。这个字段的默认值是模块根目录下面的index.js
。
"main": "lib/mand-mobile.umd.js",
module
模块以es6 module
方式被引入时的入口文件
"module": "lib/mand-mobile.esm.js",
打包工具加载模块的时候,如果模块中存在 module 字段,会优先使用,如果没找到对应的文件,则会使用 main 字段,并按照 CommonJS 规范打包。
files
定义一个目录数组,该模块被安装时,files
指定的目录集合下的文件也会被同时安装下载
"files": [
"lib",
"lib-vw",
"components",
"types",
"assets"
],
可以在模块的根目录或子目录下提供一个.npmignore
文件来忽略项目包含文件,即使这些文件被包含在files
字段中。
style
样式文件所在位置
"style": "lib/mand-mobile.css",
bin
用于定义一个命令行工具
"bin": {
"custom": "./bin/custom-init.js"
}
指定一个命令custom
,该命令对应的执行脚本为./bin/custom-init.js
。
可以在命令行工具运行:
$ custom
其他配置
{
"name": "mand-mobile", // 本模块名称,被其他模块引用时使用
"version": "1.6.8", // 版本号
"description": "A Vue.js 2.0 Mobile UI Toolkit", // 本模块描述
"homepage": "https://github.com/didi/mand-mobile", // 官网
"repository": { // 代码仓库地址
"type": "git",
"url": "git+https://github.com/didi/mand-mobile.git"
},
"bugs": { // bug提交地址
"url": "https://github.com/didi/mand-mobile/issues"
},
"engines": { // 该模块运行的平台,比如 Node 的某个版本或者浏览器。
"node": ">= 8.0.0",
"npm": ">= 5.0.0"
},
"browserslist": [ // 指定该模板供浏览器使用的版本
"iOS >= 8",
"Android > 4.0"
]
}
网友评论