什么是npm?
npm是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题
npm基本操作理解?
- 有一个放了所有需要被共享的代码的代码仓库,
- 发邮件通知jquery,bootstrap,underscore作者使用npm publish把代码提交到代码仓库上,分别取名jquery、bootstrap、underscore
- 社区里的其他人如果想使用这些代码,两种方式(一、在packge.json里写上自己需要的依赖,二使用npm命令)
- 下载完后代码会出现在node_modules目录里,就可以使用了
这些可以被使用的代码被叫做packge,这就是NPM名字的由来:Node Packge Manager(Node包管理器)
下载npm?
下载nodeJS就下载了npm
npm packge.json
-
description
一个描述,方便别人了解你的模块作用,搜索的时候也有用 -
name
packge.json中最重要的属性是name和version两个属性,这两个属性是必须要有的,否则模块就无法被安装,这两个属性一起形成了一个npm模块的唯一标识符。模块中内容变更的同时,模块版本也应该一起变化
name必须小于等于214个字节,包括前缀名称在内(如xxx/xxxmodule)
name不能以_或.开头
不能含有大写字母
name会成为url的一部分,不能含有url非法字符
下面是官网文档的一些建议
不要使用和node核心模块一样的名称
name中不要含有js和node
name属性会成为模块url、命令行中的一个参数或者一个文件夹名称,任何非url安全的字符在name中都不能使用,也不能以_或.开头
name属性也许会被卸载require()的参数中,所以最好去个尖端儿语义化的值
创建一个模块前可以先到后边的网址查查是否已经被占用 -
version
- version必须可以被npm依赖的一个node-semver模块解析
-
keywords
- 一个字符串数组,方便人搜索到本模块
-
homepage
- 项目主页url
注意:这个项目主页url和url属性不同,如果你填写了url属性,npm注册工具会认为你把项目发布到其他地方了, 获取模块的时候不会从npm官方仓库获取,而是会重定向到url属性配置的地址
-
bugs
- 填写一个bug提交地址或者一个邮箱,被你的模块坑的人可以通过这里吐槽
例如{ "url" : "https://github.com/owner/project/issues", "email" : "project@hostname.com"}
- 填写一个bug提交地址或者一个邮箱,被你的模块坑的人可以通过这里吐槽
-
license
- 你应该为你的包指定许可证,以便人们知道如何使用它,以及你对其进行的任何限制,如果你使用的例如你用BSD-3-Clause 或 MIT之类的协议,如下:{ "license" : "BSD-3-Clause" }
-
和用户相关的属性:author,contributiors
- author是一个码农,contributors是一个码农数组,person是一个恶友一些描述的对象
-
files
- files属性的值是一个数组,内容是模块下文件名或者文件夹名,如果是温恩建佳明,则文件夹下所有的文件也会被包含进来(除非文件被另一些配置排除了)
你也恶意在模块根目录下创建一个.npmignore文件,卸载这个文件里边的文件几遍被卸载files属性里面也会被排除在外,这个文件的写法同.gitignore类似
- files属性的值是一个数组,内容是模块下文件名或者文件夹名,如果是温恩建佳明,则文件夹下所有的文件也会被包含进来(除非文件被另一些配置排除了)
-
main
- main属性自定了程序的主入口文件。意思是如果你的模块被命名为foo,用户安装了这个模块病通过require("foo")来使用这个模块,那么require返回的内容就是main属性指定的文件中的module.exports指向的对象
他应该指向模块根目录下的一个文件,对大多数模块而言,这个属性更多的是让模块有一个主入口文件,然而很多某块并不写这个属性
- main属性自定了程序的主入口文件。意思是如果你的模块被命名为foo,用户安装了这个模块病通过require("foo")来使用这个模块,那么require返回的内容就是main属性指定的文件中的module.exports指向的对象
-
bin
- 很多模块有一个或多个需要配置到PATH路径下可执行模块,npm让这个工作变得十分简单(晒机上npm本身也是通过bin属性安装为一个可执行命令的)
如果要用npm的这个功能,在package.json里配置一个bin属性。bin属性是一个已命令名称为key,本地文件名称为value的map
- 很多模块有一个或多个需要配置到PATH路径下可执行模块,npm让这个工作变得十分简单(晒机上npm本身也是通过bin属性安装为一个可执行命令的)
-
repository
- 指定一个代码存放地址,对想要为你的项目贡献代码的人有帮助。
-
script
-
script属性是一个对象,里边指定了项目的生命周期各个环节需要执行的命令。key是生命周期中的时间,value是要执行的命令
-
npm如何处理脚本字段
-
对于以下脚本,npm支持package.json文件的script属性
-
prepublis:在打包和发布包之前运行,在npm install没有任何参数的本地运行
-
prepare:在打包和发布包之前运行,在npm install没有任何参数的本地运行,以及安装git依赖项时。这是在之后运行prepublish,但是之前prepublishOnly可以通过运行来执行任意脚本 npm run-script
千纸鹤后名称匹配的命令将这些运行以及(premyscript,myscript,postmyscript)。可以运行依赖项的脚本
详情参考[https://www.npmjs.cn/misc/scripts/]
-
-
config
- 用来设置一些项目不怎么变化的项目配置,例如port
-
dependencies
- dependencies属性是一个对象,配置模块一来的模块列表,key是模块名称,value是版本范围,本本范围是一个字符,可以被一个饿货多个空格分隔
- dependencies也可以被指定为一个git地址或者一个压缩包地址
-
devDependencies
- 如果有人想要下载并使用你的模块,也许他们并不希望或需要下载一些你在开发过程中使用的额外的测试或者文档框架在这种情况下,最好的方法是把这些以来添加到devDependencies属性的对象中
这些模块会在npm link或者npm install的时候被安装,也可以像其他npm配置一样被管理
- 如果有人想要下载并使用你的模块,也许他们并不希望或需要下载一些你在开发过程中使用的额外的测试或者文档框架在这种情况下,最好的方法是把这些以来添加到devDependencies属性的对象中
-
engines
*你可以指定项目运行的node版本范围