package.json---入门说明
直接的说:就是管理你本地安装的npm包
一个package.json文件可以做如下事情:展示项目所依赖的npm包
允许你指定一个包的版本[范围]
让你建立起稳定,意味着你可以更好的与其他开发者共享
创建package.json
在你要创建的目录下执行:npm init,系统会一一提示设置相关配置。提示设置的字段均为必填字段(有的可以用回车键,即设置为空带过)
- npm init –yes|-y: 执行此命令,则会直接创建一个package.json,只配置了一些必填字段,并且给出默认值。其中name: 所处的文件夹名称
package.json配置说明
这里说的项目广义,比如:我们可以把我们的项目发布成一个npm包
- name: 项目名称
- version: 项目版本号
- description: 项目描述
- keywords: {Array}关键词,便于用户搜索到我们的项目
- homepage: 项目url主页
bugs: 项目问题反馈的Url或email配置,如:
{
“url” : “https://github.com/owner/project/issues“,
“email” : “project@hostname.com”
}license: 项目许可证,让使用者知道是如何被允许使用此项目。默认是”ISC”
author,contributors: 作者和贡献者。格式设置如下:
{ “name” : “Barney Rubble”
, “email” : “b@rubble.com”
, “url” : “http://barnyrubble.tumblr.com/”
}files: 包含在项目中的文件数组。如果在数组里面声明了一个文件夹,那也会包含文件夹中的文件。可以声明一些规则来忽略部分文件。可以在项目根目录或者子目录里声明一个.npmignore。
Certain files are always included, regardless of settings:
package.json
README (and its variants)
CHANGELOG (and its variants)
LICENSE / LICENCE
Conversely, some files are always ignored:.git
CVS
.svn
.hg
.lock-wscript
.wafpickle-N
*.swp
.DS_Store
._*
npm-debug.log
- main: 主文件。比如默认是index.js,项目名称叫mymodule。那么require(‘mymodule’)将返回index.js返回的内容
- bin: 项目用到的可执行文件配置
- man: 指定一个单一的文件名或一个文件名数组。意思类似于linux命令中的man 命令,来查看一个命令的用法
如果只给man字段提供一个文件,则安装完毕后,它就是man 的结果,这和此文件名无关
{
“name”: “foo”,
“version”: “1.2.3”,
“description”: “A packaged foo fooer for fooing foos”,
“main”: “foo.js”,
“man”: “./man/doc.1”
}
上面这个配置将会在执行man foo时就会使用./man/doc.1这个文件。
如果指定的文件名并未以包名开头,那么它会被冠以前缀,像这样
{
“name”: “foo”,
“version”: “1.2.3”,
“description”: “A packaged foo fooer for fooing foos”,
“main”: “foo.js”,
“man”: [
“./man/foo.1”,
“./man/bar.1”
]
}
这将会为man foo和man foo-bar创建文件
man文件必须以一个数字结尾,和一个可选的.gz后缀(当它被压缩时)。这个数字说明了这个文件被安装到哪个节中
{
“name”: “foo”,
“version”: “1.2.3”,
“description”: “A packaged foo fooer for fooing foos”,
“main”: “foo.js”,
“man”: [
“./man/foo.1”,
“./man/foo.2”
]
}
会为使用man foo和man 2 foo而创建
- directories: CommonJS Packages规范说明了几种你可以用directories对象来标示你的包结构的方法
- directories.lib: 告诉你库文件夹的位置,目前没有什么地方需要用到lib文件夹,但是这是重要的元信息
directories.bin: 如果你在directories.bin中指定一个bin目录,在这个目录中的所有文件都会被当做在bin来使用。
由于bin指令的工作方式,同时指定一个bin路径和设置directories.bin将是一个错误。如果你想指定独立的文件,使用bin,如果想执行某个文件夹里的所有文件,使用directories.bin。
directories.doc: 把markdown文件放在这。也许某一天这些文件将被漂亮地展示出来,不过这仅仅是也许
- directories.man: directories.man指定的文件夹里都是man文件,系统通过遍历这个文件夹来生成一个man的数组
- directories.example: 把示例脚本放在这。也许某一天会被用到
repository: 项目代码存放地方
“repository” :
{ “type” : “git”
, “url” : “https://github.com/npm/npm.git”
}
“repository” :
{ “type” : “svn”
, “url” : “https://v8.googlecode.com/svn/trunk/”
}scripts: 声明一系列npm脚本指令
- prepublish: 在包发布之前运行,也会在npm install安装到本地时运行
- publish,postpublish: 包被发布之后运行
- preinstall: 包被安装前运行
- install,postinstall: 包被安装后运行
- preuninstall,uninstall: 包被卸载前运行
- postuninstall: 包被卸载后运行
- preversion: bump包版本前运行
- postversion: bump包版本后运行
- pretest,test,posttest: 通过npm test命令运行
- prestop,stop,poststop: 通过npm stop命令运行
- prestart,start,poststart: 通过npm start命令运行
- prerestart,restart,postrestart: 通过npm restart运行
"scripts": {
"dev": "npm run start",
"dist": "cross-env NODE_ENV=production node ./tools/script.js",
"lint": "eslint src/ --ext .js,.vue && stylelint \"src/**/*.vue\" --syntax less",
"lint:js": "eslint src/ --ext .js,.vue",
"lint:style": "stylelint src/**/*.less --syntax less",
"pub": "npm run dist",
"start": "cross-env NODE_ENV=development node ./tools/script.js",
"test": ""
}
config: 配置项目中需要的配置参数:
{ “name” : “foo”
, “config” : { “port” : “8080” }
, “scripts” : { “start” : “node server.js” } } }
server.js中使用process.env.npm_package_config_port来访问port
用户也可以这样修改:npm config set foo:port 80dependencies: 项目在生产环境中依赖的包
- devDependencies: 项目在开发和测试环境中依赖的包
peerDependencies: 在某些情况下,当一个主机无法require依赖包时,你会想要告诉它还有哪些工具或库与这个依赖包兼容。这通常被成为一个插件。尤其是在host文档中声明的模块会暴露一个特定的接口
{
“name”: “tea-latte”,
“version”: “1.3.5”,
“peerDependencies”: {
“tea”: “2.x”
}
}
这将确保tea-latte这个包只会和2.x版本的tea一起被安装。执行npm install tea-latte可能产生以下关系图:
├── tea-latte@1.3.5
└── tea@2.2.0bundledDependencies: {Array},发布时会被一起打包的模块
optionalDependencies: 如果一个依赖模块可以被使用, 同时你也希望在该模块找不到或无法获取时npm继续运行,你可以把这个模块依赖放到optionalDependencies配置中。这个配置的写法和dependencies的写法一样,不同的是这里边写的模块安装失败不会导致npm install失败。当然,这种模块就需要你自己在代码中处理模块确实的情况了,例如:
try {
var foo = require(‘foo’)
var fooVersion = require(‘foo/package.json’).version
} catch (er) {
foo = null
}
if ( notGoodFooVersion(fooVersion) ) {
foo = null
}
// .. then later in your program ..
if (foo) {
foo.doFooThings()
}engines: 声明项目需要的node或npm版本范围
{ “engines” : { “npm” : “~1.0.20” } }
{ “engines” : { “node” : “>=0.10.3 <0.12” } }os: 指定你的项目将运行在什么操作系统上
- cpu: 指定你的项目将运行在什么cpu架构上
- preferGlobal: 如果你的包需要全局安装,通过命令行来运行,那么设置为true。如果这个包被本地安装则会出现一个警告
- private: 如果设置为true, 那么npm会拒绝发布它
- publishConfig
package.json---入门说明的更多相关文章
- npm使用入门(package.json)
npm使用入门 crazygit 关注 2017.03.10 18:31 字数 1773 阅读 1617评论 0喜欢 10 NPM是什么 npm npm makes it easy for JavaS ...
- npm 与 package.json 快速入门
npm 是前端开发广泛使用的包管理工具,之前使用 Weex 时看了阮一峰前辈的文章了解了一些,这次结合官方文章总结一下,加深下理解吧! 读完本文你将了解: 什么是 npm 安装 npm 更新 npm ...
- npm 与 package.json 快速入门教程
npm 与 package.json 快速入门教程 2017年08月02日 19:16:20 阅读数:33887 npm 是前端开发广泛使用的包管理工具,之前使用 Weex 时看了阮一峰前辈的文章了解 ...
- [转载]npm 与 package.json 快速入门教程
npm 与 package.json 快速入门教程 2017-08-02 19:16:20 拭心 阅读数 78648更多 分类专栏: 学学前端 版权声明:本文为博主原创文章,遵循CC 4.0 BY ...
- 极简 Node.js 入门 - 1.4 NPM & package.json
极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...
- npm与package.json快速入门
本文转载自npm与package.json快速入门 导语 npm 是前端开发广泛使用的包管理工具,之前使用 Weex 时看了阮一峰前辈的文章了解了一些,这次结合官方文章总结一下,加深下理解吧! 读完本 ...
- 基于gulp编写的一个简单实用的前端开发环境好了,安装完Gulp后,接下来是你大展身手的时候了,在你自己的电脑上面随便哪个地方建一个目录,打开命令行,然后进入创建好的目录里面,开始撸代码,关于生成的json文件请点击这里https://docs.npmjs.com/files/package.json,打开的速度看你的网速了注意:以下是为了演示 ,我建的一个目录结构,你自己可以根据项目需求自己建目
自从Node.js出现以来,基于其的前端开发的工具框架也越来越多了,从Grunt到Gulp再到现在很火的WebPack,所有的这些新的东西的出现都极大的解放了我们在前端领域的开发,作为一个在前端领域里 ...
- nodejs package.json详细解读
package.json详细内容 它是这样一个json文件(注意:json文件内是不能写注释的,复制下列内容请删除注释): JavaScript { "name": "t ...
- React package.json详解
概述: 每个项目的根目录下面,一般都有一个package.json文件,定义了这个项目所需要的各种模块,以及项目的配置信息(比如名称.版本.许可证等元数据).npm install命令根据这个配置文件 ...
- NPM (node package manager) 入门 - 基础使用
什么是npm ? npm 是 nodejs 的包管理和分发工具.它可以让 javascript 开发者能够更加轻松的共享代码和共用代码片段,并且通过 npm 管理你分享的代码也很方便快捷和简单. 截至 ...
随机推荐
- linux web服务基础知识,dns
#web服务基础知识c/s 客户端/服务器b/s 浏览器/服务器 nginx > web server 服务端浏览器 > web client 客户端 #dns解析 ...
- 数据库设计和ER模型-------之ER模型的基本概念(第二章)
ER模型(实体联系模型)的基本元素 实体:是一个数据对象,在ER模型中,实体用方框表示,方框内注明实体的名称 联系:表示一个或多个实体之间的关联关系,联系用菱形框表示,并用线段将其与相关的实体联系起来 ...
- CMD命令行合并多个txt文件到一个txt文件
运行->输入CMD回车 输入: Copy G:\MyFolder\*.txt G:\NewFolder\a.txt 回车即可 意思是将G:\MyFolder\下的所有txt文本内容复制到G:\ ...
- 【学习】Python解决汉诺塔问题
参考文章:http://www.cnblogs.com/dmego/p/5965835.html 一句话:学程序不是目的,理解就好:写代码也不是必然,省事最好:拿也好,查也好,解决问题就好! ...
- SQL 优化tips 及误区
1. 几个表进行join,然后过滤 等价于 分别过滤为小表后,再join? 并不完全. 2)确实比1)效率高, 但要注意一些NULL值过滤.否则2)得到的结果比1)多 2. left join ...
- $(document).ready和window.onload 简单分析区别
<锋利的JQuery>翻开没看几页,就遇到了这个神奇的问题,之前在橙旭园学习的时候,JQuery只教了一些基础的,像链式操作等,那时以为这个和window.onload()差不多一模一样, ...
- leetcode1024
class Solution(object): def videoStitching(self, clips: 'List[List[int]]', T: int) -> int: li = s ...
- day10-连接mysql虚拟机报错
连接mysql时报:message from server: "Host '192.168.76.1' is not allowed to connect to this MySQL ser ...
- windows7 安装虚拟机,xsheel连接不上的问题,记录一下
安装了好久,一直连接不上...,原来是网络没开..重新安装设置就可以了!!!记录一下
- android 环境变量
1.新建一个环境变量和系统变量名称为ANDROID_HOME,变量值为当前安装SDK的目录 2.把%ANDROID_HOME%\platform-tools;%ANDROID_HOME%\tools添 ...