node中npm结构详解以及自定义npm包上传到npm教程
1. package.json
作用:
1.每个Node项目中及第三方包中都必须的
2.它描述着Node项目或是第三方包的一些信息
3.透过这些信息可以知道该Node项目或是第三方包运行起来要依赖于哪些第
三方包
4.还可以在里面写一些终端执行脚本,在package.json的scripts中进行定义
使用步骤:
1.打开终端cmd或是powershell
2.切换到该Node项目的根目录下面去
3.执行 npm init -y 或是 npm init 生成package.json
4.在开发过程中安装第三方包的时候这样写 npm install --save 或是
npm install --save-dev
注意:
1.使用 npm init -y 的时候一定要注意,项目名称不能是中文,否则报错
2.npm init 生成package.json的时候,按照要求一步一步来
3.如果是开发阶段需要的第三方包,使用 npm install --save-dev
4.如果是运行阶段需要的第三方包,使用 npm install --save
package.json一些重要属性说明:
name : 项目或是第三方包的名称,也是其它项目导入时require()中的名称
description : 这个项目或是第三方包功能的描述
main : 项目或是第三方包的入口文件
license : 授权方式,一般写MIT
keywords : 发布到npmjs中之后,其它开发者搜索我们这个第三方包的关键
字
scripts : 以后在终端执行的脚本
devDependencies : 开发阶段依赖的包
dependencies : 运行阶段依赖的包
author : 作者
version : 版本号
2. npm的介绍
npm是用来管理nodejs第三方包的一个工具,利用它可以
1.安装 本地包/全局包
2.将自己写的包发布到npmjs上面去,供全世界的开发者使用
npm在安装好node之后,就会自动安装到node的安装目录中,一般是安装在node根目录的node_modules的子文件夹下,比如我的npm就安装在 C:\Program Files\nodejs\node_modules
如何测试npm是否安装成功,在终端中输入 npm -v 如果能出现版本号就表示安装成功
3. npm操作之从npmjs.com中安装/下载包
安装包/下载包分两种
本地安装:用在当前项目中
命令:npm install 本地包的名称
全局安装:以后在终端中使用
命令:npm install -g 全局包的名称
其它命令:
1.查看全局包安装路径:npm root -g
2.更改全部安装包安装路径:npm config set fix "全局包的路径"
当我们用 `npm install - g 全局包的名称` 这个指令的时候,有的时候全局包可能会安装在 C:\Users\你的电脑名称\AppData\Roaming\npm\node_modules下面,这个时候如果你要更改全局包的安装路径,可以使用
4. 发布自己的框架到npm上面去【了解】
步骤:
1.先创建一个以包命令的文件夹("注意:该包名必须是npmjs上面没有的,否则后面上传不上去哈")
2.写好你自己要发布的包里面的代码(书写规范建议)
2.1 个人建议将那些零散的代码放在一个 lib 文件夹下
2.2 在包的更目录下建立一个 index.js 入口js文件
2.3 包名称必须小写,这个是npmjs.com的规定
3.在包的根目录下设置好 package.json 里面的内容
创建package.json有两种方式
方式1:npm init -y (会生成好package.json,并且会在package.json中生成些默认的键值对)
方式2:npm init (也会生成package.json,但是会提示你生成哪些需要的键值对,一般要生成的键值对有:name、version、main、description、keyword等等)
4.可以在包的根目录下创建一个README.md写上你这个框架的介绍,以及如何使用
5.开始上传
注意事项:在要发布包的文件夹下,执行相关指令(打开面板的执行路径是和package.json在同一级就行)
步骤:
5.1 先登录到npmjs网站上面去: npm adduser
会提示你输入在npmjs网站上面的用户名和密码的,在这个过程中当你输入了正确的用户名和密码之后,还可能提示你的用户名和密码错误,这个时候就需要查看下当前的镜像是否是淘宝
5.2 登录成功之后,这个时候使用 npm publish 发布到npmjs.com上面去
6.撤销(可选)
步骤:
6.1 先登录
6.2 撤销 npm unpublish 包名称@版本号
注意:
1.登录之前要看下我们的镜像是否是npmjs.com
2.如果改了源代码,要再发布,得更改下版本号,版本号只能递增
5. require()加载规则
基本概念:
1.核心模块、自定义模块(自己写的模块)、第三方包都优先从缓存加载
2.在windows中加载一个自定义模块(自己写的模块)要使用 ./ 或者 ../ 开头
自定义模块(自己写的模块)加载规则:
一个自定义模块可以不写扩展名, require()会自动依次按照 .js .node .json的顺序进行补齐后加载,如果三个扩展名都没有,则当做核心模块或者包加载,如果核心模块或者包都没有,则报错
开发建议:自定义模块最好写扩展名,提高查找效率
require加载第三方包的规则:
依次按照module.paths 数组中的路径,根据传入require的标识符名称进行查找,如果都没有查找到标识符名称的包,则报错
找到node_modules之后再加载具体第三方包(以xtpl为例)规则:
1.如果包下有package.json 文件,并且其中的main 属性配置的文件能够找到,则加载此文件
2.如果package.json文件没有,或者它里面main属性配置的文件名不能找到,则默认加载当前文件夹下的index.js
3.如果都没有找到则报错
总结:require()加载node_modules的时候是按照module.paths 数组中的路径一个个查找,直到找到为止
6. HTTP模块处理静态资源
前提:
以后所有的静态资源(html,css,js,图片)以及NodeJS写的代码都是放在
服务器端的
如何访问呢?
当浏览器发送请求,请求某个网页之后,会将这个请求发送到后台服务器
node.exe,然后根据路由规则交给对应的js去处理,在js里面就去将静态资源
读取到内存,经过一番处理之后返回给浏览器去展示
如果返回的网页中,还需要进一步请求,比如网页中要用到某个.css文件,这个
时候同样会发送网络请求给服务器node.exe,服务器同样还是按照上面的步骤进行处理,先读取到REPL环境中来,然后经过处理之后返回给浏览器
注意点:
浏览器可能访问的服务器资源是不一样的,比如浏览器可能需要html,可能需
要css,也可能需要图片,所以服务器返回资源的时候一定要告诉浏览器
我给你返回的到底是啥,这个时候就一定要在响应头中增加一个键值对
key就是Content-Type,值则根据你给浏览器返回的是啥,你就写啥
7. http模块实现动态网页
# 不使用模版
1.去读取模版的内容
2.利用数据生成新的元素
3.利用新的元素替换模版中的占位符
缺点:代码太多
容易出错
# 使用模版
成套的模版,既包含前端也包含nodejs
https://github.com/xtemplate/xtemplate/blob/master/docs/syntax-cn.md 网页使用的
https://github.com/xtemplate/xtpl NodeJS使用的
注意:
这个模版要配合起来使用,除了写html里面的模版,还要写nodejs中的代码
其它不懂的看文档
作者:MF 孟飞 ;
如果文中有什么错误,欢迎指正,谢谢!