package.json简介
package.json在Node项目中用于描述项目的一些基本信息,以及依赖的配置,一般每一个Node项目的根目录下都有一个package.json文件。
在项目的根目录中我们可以通过npm init来初始化一个package.json文件,其内容是一个Json对象,基本结构如下:
{ "name": "package", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo "Error: no test specified" && exit 1" }, "author": "", "license": "ISC" }
package.json文件中包含了很多的属性,这些属性都是项目的一些基本信息以及一些配置信息,这里是一些更详细的信息,着重介绍一些我们经常用到的属性。
name main属性
name和version属性是package.json文件两个不可或缺的属性,通常name属性和我们项目的文件名称是一样的,version表示这个项目的版本号。
main属性指定了加载时的入口文件,当使用require()语法来加载一个模块时,就会查看package.json文件的main属性,main属性的属性值就是要加载的模块。
在桌面新建一个文件夹(模块)命名为factory,在该文件夹内新建一个index.js文件,在index.js文件中写入以下代码:
function create(){ var product = "我是一个产品"; return product; } exports.create = create;
然后在桌面上新建一个store文件夹,在该文件夹内新建一个store.js文件,在store.js文件中写入以下代码:
var factory = require("../factory"); var product = factory.create(); console.log(product);
在命令行中进入store文件夹输入node store.js,可以发现运行成功,在store.js中通过require()函数加载factory模块时如果没有package.json文件,默认就会加载模块中的index.js文件。如果存在package.json文件这样在require()加载一个模块时,就会读取package.json文件的main属性,main属性指定的入口文件就是require()要加载的文件:
现在通过命令行进入factory文件通过npm init命令初始化一个package.json文件,将package.json文件的main属性改为demo.js,然后在将factory文件内的index.js文件改名为demo.js,然后在命令行中进入store文件在执行node store.js,仍然是可以成功运行的。
scripts属性
scripts属性可以指定npm命令缩写。在store文件夹中初始化package.json文件,然后添加scripts属性:
执行npm run start仍然可以运行成功,通过scripts属性npm run start等价于node store.js。
关于scripts的更具体的使用请看这里。
dependencies devDependencies属性
当我们在命令行中执行npm install jquery -save时会在当前目录下新建一个node_modules文件夹,将jquery下载到node_modules文件内,并将该模块的依赖写入到dependencies内。如果执行npm install react -save-dev时会将react下载到node_modules文件下并将依赖写入到devDependencies内。
"dependencies": { "jquery": "^3.1.1" }, "devDependencies": { "react": "^15.3.2" }
如果在写入依赖之后我们删除node_module文件,然后执行npm install就会读取package.json文件的dependencies和devDependencies属性自动下载写入的依赖模块。