Javascript模块化开发1——package.json详解
一、环境安装
Node.js 安装包及源码下载地址为:https://nodejs.org/en/download/。
在该页面你可以根据不同平台系统选择你需要的 Node.js 安装包。
Node.js里面集成了npm,npm是一种包管理工具,允许用户从NPM服务器下载别人编写的包或命令行程序并分享自己编写的包或命令行程序。
二、创建模块
输入命令npm init后根据提示输入相关信息,如名称,描述,版本等,将会创建一个初始的package.json。
接着可以编辑相关属性来定义该模块,大多数的属性都很直观,下面只挑几个进行说明:
1.name
项目/模块名称。
命名规范如下:
- 名称可以前缀scope标识,如@myorg/mypackage。
- 名字也将作为require()命令的参数,所以应该尽量简明,长度必须小于等于214个字符。
- 名字将会被作为url的一部分,所有要符合http url的一般命名规则,不能包含url非法字符,也不能以"."(点)或者"_"(下划线)开头。
- 不能包含大写字母。
- 名字里不要再包含"js"和"node",且不要用和核心Node模块相同的名字。
- 如果包要发布到NPM平台上的话,最好先访问https://www.npmjs.com/检查下有没有重名。
2.repository
用于指示代码存放的位置。
"repository": {
"type": "git",
"url": "https://github.com/***.git"
}
"repository": {
"type": "svn",
"url": "https://***"
}
3.private
设为true这个包将不会发布到NPM平台下。如果不设置repository,则应该设置private为true。
4.files
包所包含的所有文件,可以取值为文件夹。
通常我们还是用.npmignore来去除不想包含到包里的文件。
不管如何设置,有些文件会永远都包含在包里:
package.json
README
CHANGES / CHANGELOG / HISTORY
LICENSE / LICENCE
NOTICE
main里包含的文件
不管如何设置,有些文件会永远都不能包含在包里:
.git
CVS
.svn
.hg
.lock-wscript
.wafpickle-N
..swp
.DS_Store
._
npm-debug.log
.npmrc
node_modules
config.gypi
*.orig
package-lock.json
5.main
main字段指定了加载的入口文件,require('moduleName')就会加载这个文件。这个字段的默认值是模块根目录下面的index.js。
6.browser
定义 npm 包在 browser 环境下的入口文件
7.Bin
bin项用来指定各个内部命令对应的可执行文件的位置。很多的包都会有执行文件需要安装到PATH中去。
这个字段对应的是一个Map,每个元素对应一个{ 命令名:文件名 },例如:
"bin" : {
"myapp" : "./cli.js"
}
在安装第三方带有bin字段的npm,那可执行文件会被链接到当前项目的./node_modules/.bin中
可通过命令行node node_modules/.bin/myapp执行相关js文件
8.config
可以用来添加命令行的环境变量,例如:
{
"name" : "test",
"config" : { "msg" : "hello" },
"scripts" : { "start" : "node index.js" }
}
在 index.js 中,我们可以直接使用该环境变量:
console.log(process.env.npm_package_config_msg);
9.dependencies
指定运行时依赖的包。
10.devDependencies
指定开发时依赖的包。
11.peerDependencies
如果你的包是插件,而用户在使用你的包时候,通常也会需要这些依赖(插件),那么可以将依赖列到这里。
12.bundledDependencies
绑定的依赖包,发布的时候这些绑定包也会被一同发布。
13.optionalDependencies
可选的依赖,即使这些依赖没有,也可以正常安装使用。
14.scripts
定义可被npm run command执行的所有命令,可以通过输入npm run查看所有的命令列表。
比如下面定义了运行 npm run start和npm run stop时,所要执行的命令。在cmd下输入命令npm run start相当于输入命令node start.js"
"scripts": {
"start": "node start.js",
"stop": "node stop.js",
}
scripts命令具有以下特性:
- 执行npm run command时,会先安装devDependencies中所定义的依赖的包,再运行command所定义的命令。
例如:
"scripts": {
"build": "npm install && grunt"
}
运行npm run build会先安装devDependencies中定义的一些模块,然后再运行npm install和grunt。
- 支持生命周期钩子
npm支持pre- 和 post-两种钩子,前者是在脚本运行前,后者是在脚本运行后执行。所有的命令脚本都可以使用钩子(包括自定义的脚本)。
比如运行npm run build,会按以下顺序执行:
npm run prebuild -> npm run build -> npm run postbuild - npm提供了一些针对当前包的内置命令,并设置相关的默认行为。这些默认行为可以在scripts中改写其行为。
相关的内置命令有:
npm start: npm run start的简写,如果不在script中配置start,那么npm start默认执行node server.js
npm stop: npm run stop的简写,执行自定义stop脚本,没有默认行为。
npm restart: npm run stop&&npm run restart&&npm run start的简写。
npm test ,npm run test的简写,执行自定义test脚本,没有默认行为。
Javascript模块化开发1——package.json详解的更多相关文章
- Javascript模块化开发2——Gruntfile.js详解
一.grunt模块简介 grunt插件,是一种npm环境下的自动化工具.对于需要反复重复的任务,例如压缩.编译.单元测试.linting等,自动化工具可以减轻你的劳动,简化你的工作.grunt模块根据 ...
- (译)package.json详解
原文链接 概述 本文囊括了所有package.json文件中你需要知道的细节.注意package.json必须是纯JSON的,而不仅仅是一个JavaScript对象字面量.该文件描述的很多行为都受np ...
- VSCode插件开发全攻略(三)package.json详解
更多文章请戳VSCode插件开发全攻略系列目录导航. package.json 在详细介绍vscode插件开发细节之前,这里我们先详细介绍一下vscode插件的package.json写法,但是建议先 ...
- React package.json详解
概述: 每个项目的根目录下面,一般都有一个package.json文件,定义了这个项目所需要的各种模块,以及项目的配置信息(比如名称.版本.许可证等元数据).npm install命令根据这个配置文件 ...
- package.json详解
1.概念 Node.js项目遵循模块化的架构,当我们创建了一个Node.js项目,意味着创建了一个模块,这个模块的描述文件,被称为package.json 亦即:模块的描述文件 = package.j ...
- package.json详解以及package-lock.json的作用
一.创建 package.json输入如下命令之后,会要求填写基本的配置信息,这里,我们选择一路回车即可,待生成 package.json 文件之后,再来配置. npm init 二.配置 packa ...
- npm中package.json详解
通常我们使用npm init命令来创建一个npm程序时,会自动生成一个package.json文件.package.json文件会描述这个NPM包的所有相关信息,包括作者.简介.包依赖.构建等信息,格 ...
- package.json 详解
使用package.json 属性说明 name - 包名. version - 包的版本号. description - 包的描述. homepage - 包的官网 url . author - ...
- vue package.json 详解
示例: { "name": "scrm", "version": "0.1.0", "private" ...
随机推荐
- 在 Cocos2d-x 中添加自己的微博链接
配置:OS X 10.10 + Xcode 6.0 + Cocos2d-x-3.2 一.Android 端代码 1.在 Cocos2dxActivity.java 中添加openUrl函数并导入响应包 ...
- 阿里钉钉技术分享:企业级IM王者——钉钉在后端架构上的过人之处
本文引用了唐小智发表于InfoQ公众号上的“钉钉企业级IM存储架构创新之道”一文的部分内容,收录时有改动,感谢原作者的无私分享. 1.引言 业界的 IM 产品在功能上同质化较高,而企业级的 IM 产品 ...
- Googleplaystore数据分析
本次所用到的数据分析工具:numpy.pandas.matplotlib.seaborn 一.分析目的 假如接下来需要开发一款APP,想了解开发什么类型的APP会更受欢迎,此次分析可以对下一步计划进行 ...
- distinct关键字对执行计划的影响
一.前言 最近看到一段话,"count(distinct 列名)若列上有索引,且有非空约束或在where子句中使用is not null,则会选择索引快速全扫描.其余情况则选择全表扫描&qu ...
- HTML识别后台传输或者js变量中字符串里的 '\n' 并成功换行显示
HTML识别 string 里的 '\n' 并成功换行显示 设置标签的的css属性 white-space: pre-line; <div style='white-space: pre-lin ...
- PHP mysqli_stmt_bind_param MySQLi 函数
定义和用法 mysqli_stmt_bind_param - 将变量绑定到准备好的语句作为参数 版本支持 PHP4 PHP5 PHP7 不支持 支持 支持 语法 mysqli_stmt_bind_pa ...
- Java - 运算符 方法
本位是复习笔记,不适合零基础 赋值运算符 变量 名称 = 值/表达式 ; 需要注意的是,赋值运算符的计算是按照从右往左的; 注意: 1.在使用赋值符号时,必须保证左侧的类型范围大于等于右侧产生的类型 ...
- SpringCloud(八):springcloud-bus消息总线(刷新配置服务)
Bus消息总线: 好了现在我们接着上一篇的随笔,继续来讲.上一篇我们讲到,我们如果要去更新所有微服务的配置,在不重启的情况下去更新配置,只能依靠spring cloud config了,但是,是我们要 ...
- go语言中strings包常用方法
strings.HasPrefix(s string, prefix string) bool:判断字符串s是否以prefix开头 strings.HasSuffix(s string, suffix ...
- C#&.Net干货分享- iTextSharp导出数据源到PDF
namespace Frame.ITextSharp{ /// <summary> /// iTextSharp导出数据源到PDF /// </summary> ...