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 孟飞 ;
如果文中有什么错误,欢迎指正,谢谢!
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号