# npm node-package-manager

# 全局下载(在命令行下使用) -g

npm install -g cnpm --registry=https://registry.npm.taobao.org

cnpm 安装和npm一样,多了一点命令,其他的直接看连接

# 使用淘宝的源来下载node模块跟环境依赖

# 安装nrm源切换工具

npm i nrm -g

# 增加源

nrm ls
nrm add originname originhref
nrm use originname

# 安装全局

https://github.com/ksky521/nodePPT

npm install nodeppt -g

# http-server

npm install http-server -g 

启动服务

http-server -p 3000 更改端口

# 卸载

npm uninstall http-server -g

# 本地安装(在我们代码里使用的)

# 初始化依赖文件(package.json)

在指定目录下生成,而且目录必须是英文字母不许出现汉字

npm init -y

# 1.开发依赖 gulp

npm install gulp (--save-dev)或者(-D)

# 2.项目依赖 jquery

查看版本

npm info jquery
npm install jquery@2.2.4 (--save)或者(-S)

# 3.发布自己的包

  • package.json
    • name不能和已发布的包重名
    • main里对应的主文件件写一个
  • 发布要切换到npm
  • 添加用户 有的话可以登录
npm addUser

添加账号密码邮箱

  • 发布
名字不能一样
而且发布的时候要检验邮箱,就是去邮箱接收新的npm信息并登陆
npm publish 
  • 卸载包
npm unpublish  --force

# 模块的查找机制

为什么-g安装的可以在命令行下使用,npm可以在命令行下使用,所有的全局包 都安装在npm上,会在npm下创建一个脚本文件,可以映射到真实的文件上,所以通过全局安装的可以直接在命令行下使用

# bower(管理前端文件的)

ubuntu系统下安装

$ sudo bower install --allow-root

npm(管理node模块的) ->安装的文件放到node_modules下 不能指定安装目录 bower(管理前端文件的) ->制定目录下载 只管理前端文件(在git中下载)

npm install bower -g

# 1.1初始化 bower.json记录依赖

bower init

# 1.2下载文件

bower install bootstrap --save

# 1.3 指定目录

.bowerrc
{"directory":"src/public/lic"}

默认安装到bower_component下

----------------------超超版本2------------------------------------

  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 : 版本号
  1. npm的介绍

npm是用来管理nodejs第三方包的一个工具,利用它可以

1.安装 本地包/全局包 
2.将自己写的包发布到npmjs上面去,供全世界的开发者使用

npm在安装好node之后,就会自动安装到node的安装目录中,一般是安装在node根目录的node_modules的子文件夹下,比如我的npm就安装在 C:\Program Files\nodejs\node_modules

如何测试npm是否安装成功,在终端中输入 npm -v 如果能出现版本号就表示安装成功

  1. 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下面,这个时候如果你要更改全局包的安装路径,可以使用

  2. 发布自己的框架到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.如果改了源代码,要再发布,得更改下版本号,版本号只能递增
      
  3. 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 数组中的路径一个个查找,直到找到为止

  4. HTTP模块处理静态资源

    前提:

    以后所有的静态资源(html,css,js,图片)以及NodeJS写的代码都是放在服务器端的

    如何访问呢?

    当浏览器发送请求,请求某个网页之后,会将这个请求发送到后台服务器node.exe,然后根据路由规则交给对应的js去处理,在js里面就去将静态资源读取到内存,经过一番处理之后返回给浏览器去展示

    如果返回的网页中,还需要进一步请求,比如网页中要用到某个.css文件,这个时候同样会发送网络请求给服务器node.exe,服务器同样还是按照上面的步骤进行处理,先读取到REPL环境中来,然后经过处理之后返回给浏览器

    注意

    浏览器可能访问的服务器资源是不一样的,比如浏览器可能需要html,可能需要css,也可能需要图片,所以服务器返回资源的时候一定要告诉浏览器我给你返回的到底是啥,这个时候就一定要在响应头中增加一个键值对key就是Content-Type,值则根据你给浏览器返回的是啥,你就写啥

  5. http模块实现动态网页

    # 不使用模版

     1.去读取模版的内容
     2.利用数据生成新的元素
     3.利用新的元素替换模版中的占位符
    
     缺点:代码太多
          容易出错
    

    # 使用模版

     成套的模版,既包含前端也包含nodejs
    
     https://github.com/xtemplate/xtemplate/blob/master/docs/syntax-cn.md 网页使用的
    
     https://github.com/xtemplate/xtpl NodeJS使用的
    
     注意:
     
         这个模版要配合起来使用,除了写html里面的模版,还要写nodejs中的代码
         其它不懂的看文档
    

    # 全局安装的位置

    方法一:

    设置到自己想要放的位置:

    打开:nodejs安装目录/node_modules/npm/.npmrc这个文件,修改里面的路径

    prefix = E:\nodejs\npm_global_modules
    

    方法二:

    使用快捷键 win+R,输入cmd打开命令窗口,输入如下代码:

    npm config ls
    

    其中:prefix=C:\Users\Administrator\AppData\Roaming\npm就是我们全局安装了哪些方法的地方

    通过命令更改路径

    npm config set prefix E:\