首先,要先在这里分享一下我的喜悦,从昨天开始其实一直都在喜悦当中的,我收到了我的第一份offer,这感觉不摆了,比第一桶金都还舒服,虽然我还没收到第一桶金哈哈,不过offer都得了应该也快了。

今天的内容有点小多,容我慢慢道来

1.

首先我们看到包的管理配置文件以及下包慢的问题,在我们多人协作下,是不是要经常把自己的代码共享出去通过git、github之类的,那么我应该发现一个问题,一个项目文件,有30M大小,而代码只有区区2M左右的内存,剩余的都给谁了?都给了第三方包也就是node_modules里面的内容,所以为了轻量化,我们在共享代码的时候肯定是不能带node_modules这个文件夹的,把她扔进.gitignore文件里面忽略掉,那我们没有了第三方包的依赖怎么执行代码呢,第三方包肯定还是要的,没有怎么能行,我们有一个package.json的文件在这里面存放了安装的所有的第三方包的内容。

1.1

快速创建packagejson

只需要在项目的文件中执行node init -y

要注意一下,只能在英文目录下去创建这个文件,这里的英文是当前目录为英文,也就是上一级为中文都没的关系,然后就是当我们运行npm i安装第三方包的时候就会把信息给到这个json文件中,所以我们在安装前要先创建json文件。

1.2

dependencies节点

这是这个json里面的节点名,记录了npm安装了哪些包

1.3

既然我们没有包,又知道了所有需要的包名,那么怎么来一次性安装所有的包?

npm install或者i不添加包名即可安装所有的包

1.4

卸载包

npm uninstall 包名没有简写

1.5

devDependencies节点

这个节点也是保存的安装的包,有些包是我们在项目开发过程中才会用到,而有些包使我们开发上线都会用到的包,我们一般把前者放在devDependencies节点里面,把后者放在dependencies节点里面。

当然他也有特定的安装方式

npm i 包名 -D

2.

然后我们看到下包会慢的一些原因,是因为我们的npm的服务器是国外的,通过海底光缆传过来的数据当然慢,所以这个时候我们需要把npm的镜像服务器换掉,通过npm config set registry可以查看当前npm的服务器

再通过npm config set registry='淘宝或者腾讯的镜像地址'就可以设置过来了。

之所以粗略带过,是因为我们有简便方法,通过npm先安装一个nrm全局可用工具,全局就需要在包名后面添加一个-g

然后nrm ls 可查看当前可设置的服务器地址,再用nrm use 加这个服务器名字即可使用。

3.

包的分类

我们把包分为两大类,一个是项目包,就是被安装到node_modules里面的包,这里面又有开发依赖包放在devDependencies节点里面的和核心依赖包开发上线都用得到的,

二个是全局包,放在c盘目录下面的,安装的时候通过-g参数安装的。

注意一下:只有工具性质的包才有全局安装的必要,因为他们提供了终端的一些命令

3.1

i5ting_toc

可以把md文件转换为html的小工具,注意是工具,这个其实挺方便的,前面一直用的Markdownpad2。

怎么来使用呢?

i5ting_toc  -f  md文件路径 -o表示浏览器打开

3.2

一个规范包的结构必须要包含三个东西

①每个包必须是单独目录

②包的顶级目录下必须包含package.json

③packag.json必须包含name、version、main三个属性

接下来我们就来做一个 属于自己的包:要实现的功能就为:可以格式化日期、可以对html中的字符转义为特殊字符又转义回来。

首先要初始化包的基本结构,创建一个包的文件夹,里面放三个文件,index.js、package.json、README.md分别表示包入口文件、包的配置文件、包说明文档。

接下来在初始化package.json里面的内容,{name:使我们包的名字到时候npm网站上搜索也是这个名字,所以使用前先去网站看一下有没有重名的,

version:版本号,

main:入口文件,说明了我们的导入就为这个文件要注意一下,如果说外界导入的时候只是导入了一个目录,并不是这个js文件,那么node就会去找这个目录下的package.json里面的main再去找入口文件,

description:详细介绍,

keywords:关键字是一个数组,

license:开原许可协议}

接下来就是在index.js中定义三个功能的函数了 ,这里有一个很重要的概念,模块化,我们的格式化时间是不是需要一个函数,还要补零是不是又要一个函数,那么这两个函数可以放在一个单独的js文件里面,我们的html转为特殊字符、特殊字符返回html也需要一个单独的js文件,完成过后需要在各自的文件把函数放进exports里面,然后index.js导入两个js文件他此时得到的是一个放有这几个函数的对象,我们需要通过es6语法中的扩展运算法,给她解构出来,就只有逗号分隔的函数了,这里有点绕可以配合代码好好理解下。

// 1.格式化时间
function dateFormat(time) {
const date = new Date(time)
let y = date.getFullYear()
let m = getZero(date.getMonth() + 1)
let d = getZero(date.getDate())
let h = getZero(date.getHours())
let mm = getZero(date.getMinutes())
let s = getZero(date.getSeconds())
return `${y}-${m}-${d} ${h}:${mm}:${s}`
} // 2.补零函数
function getZero(n) {
return n < 10 ? '0' + n : n
}
// 6.1共享成员
module.exports = {
dateFormat
}
// 4.html转义函数
function getHtmlCode(htmlStr) {
return htmlStr.replace(/<|>|"|&/g, match => {
switch(match) {
case '<':
return '&lt;'
case '>':
return '&gt;'
case '"':
return '&quot;'
case '&':
return '&amp;'
}
})
}
// 5.还原html
function getHtml(htmlStr) {
return htmlStr.replace(/&lt;|&gt;|&quot;|&amp;/g, match => {
switch(match) {
case '&lt;':
return '<'
case '&gt;':
return '>'
case '&quot;':
return '"'
case '&amp;':
return '&'
}
})
} // 6.2共享成员
module.exports = {
getHtmlCode,
getHtml
}
index.js
// 6.3 导入
const date = require('./src/dateFormat')
const strEscape = require('./src/strEscape') // 3.共享成员
module.exports = {
...date,
...strEscape
}

test.js

const bag = require('./index')
console.log(bag.dateFormat(new Date()));
console.log(bag.getHtmlCode('<h2>我是一个大温柔"嘻嘻"ss&</h2>'));
console.log(bag.getHtml('&lt;h2&gt;我是一个大温柔&quot;嘻嘻&quot;ss&amp;&lt;/h2&gt;'));

3.3

我们继续看到怎么来编写包的说明文档,就是把包的作用以及用法,注意事项说明清楚即可

## 安装
```
npm i mybag-huang
```
## 导入
```js
const mybag = require('mybag-huang')
```
## 格式化时间
```js
const time = mybag.dateFormat(new Date())
```
## 转义html代码中的特殊字符
```js
 mybag.getHtmlCode('<h2>我是一个大温柔"嘻嘻"ss&</h2>')
 ```
 ## 转义html代码中的正常字符
 ```js
 mybag.getHtml('&lt;h2&gt;我是一个大温柔&quot;嘻嘻&quot;ss&amp;&lt;/h2&gt;')
```
## 开源协议
ISC
3.4
发布包
首先注册npm账号,然后登陆 账号是在终端上登录:npm login
然后到所处的包的 目录下 npm pbulish既可以发布在npm网站上,但是要注意一下,需要切回到官方的服务器才能够发布成功。
删除已发布的包npm unpublish 包名 --force 只能删除发布后72小时内的包,删除后二十四小时内不可再发布相同的包
4.
模块加载机制
我们的模块都是优先从缓存当中来加载的,当我们导入过后就会第一时间加载在缓存中,所以导入相同的文件不管你导入多少次,都是加载的第一个文件。
内置模块的加载机制
内置模块加载的优先级最高,比如说内置模块和我们的自定义模块如果名字一样,那么导入的时候是认为这是一个内置模块的。
自定义模块的加载机制
require里面的文件必须以./或者../开头不然就会被当为内置或者第三方模块。
如果说省略了扩展名,那么node会依次开始查找js、json、node的文件扩展名都没有找到就会报错。
第三方模块的加载机制
require不是内置模块也不是,/开头那么就会从当前目录的modules文件夹里面开始照这个第三方模块而且没找到的话会继续往上一级找,直到找到根目录为止。
当你把目录作为require的路径时,会首先去找package里面的main如果没有指定,就会加载当前目录下的index.js都没有就会报错。
 
5.
express
5.1
首先什么叫做express
他和http内置模块相同,专门创建web服务器的
5.2
基本使用
1.安装
npm i express
2.创建web服务器
①导入express
②创建服务器
const app = express()
③diaoyong
app.listen(端口号,回调函数)
3.
监听get、post
app.get/post(url,回调函数)
// 1.导入
const express = require('express')
// 2.创建服务器
const app = express() // 4.监听客户端的get和post请求并响应
app.get('/index.html ', (req, res) => {
res.send({
"name" : "zs",
"sex" : "男",
"age" : 19
})
})
app.post('/index', (req, res) => res.send('post成功'))
// 3.开启服务器
app.listen(80, () => {
console.log(
'express server running at http://127.0.0.1'
)
})

4

获取url中的参数

通过req.query获得一个对象保存的参数

const express = require('express')
const app = express()
app.get('/', (req, res) => {
res.send(req.query)
})
app.listen(80, () => {
console.log('express server running at http://127.0.0.1');
})

获取url当中的动态参数

req.params

const express = require('express')
const app = express()
app.get('/:id', (req, res) => {
console.log(req.params);
})
app.listen(80, () => {
console.log('express server running at http://127.0.0.1');
})

5.3

托管静态资源

express.static()这个方法可以创建静态服务器的时候,将文件目录下的css、图片、js等共享出去对外开放。

app.use(express.static('文件夹'))要注意一点对谁开放那么这个目录是不会出现在url路径当中的

const express = require('express')
const app = express() app.use(express.static('./clock')) app.listen(80, () => console.log('express server running at http://127.0.0.1'))

如果要托管多个目录就把代码执行多次即可,但是要注意如果访问的文件名有几个目录都有的话,会按照顺序执行前面的。

挂在路径前缀

const express = require('express')
const app = express() app.use('/abc',express.static('./clock')) app.listen(80, () => console.log('express server running at http://127.0.0.1'))

5.4

今天最后的内容更新一个很实用的小工具,nodemon直接全局安装,他的作用就是我们平时改了一下代码,比如服务器必须重新断开重新连接,才会看到效果就会很麻烦,而有了这个工具后直接执行nodemon 文件名他就会检测到我们的代码修改情况自动去重新启动,就跟我们html的live一样

node.js - 包、express的更多相关文章

  1. Node.js包管理器:

    Node.js包管理器: 当我们要把某个包作为工程运行的一部分时,通过本地模式获取,如果要在命令行下使用,则使用全局模式安装 使用全局模式安装的包并不能直接在JavaScript文件中用require ...

  2. Node.js系列-express(上)

    前言 Node.js系列的第一篇:http,大概描述了通过使用node.js内置的api创建一个服务并监听request实现简单的增删改查.现在,我们就通过通读express官网及使用express框 ...

  3. 9.Node.js 包管理器npm

    npm 是 Node.js  官方提供的包管理工具, 用于 Node.js包的发布.传播.依赖控制 安装 express ==> 流行的基于Node.js的Web开发框架,可以快速地搭建一个完整 ...

  4. 《Node.js 包教不包会》

    <Node.js 包教不包会> 为何写作此课程 在 CNode(https://cnodejs.org/) 混了那么久,解答了不少 Node.js 初学者们的问题.回头想想,那些问题所需要 ...

  5. 如何设计一个基于Node.js和Express的网站架构?

    前言 今年七月份,我和几个小伙伴们合伙建立了一个开发团队.业务开展如火如荼的同时,团队宣传就提上了日程,所以迫切需要搭建公司网站出来.确定目标后我们就开始考虑如果构建一个企业网站.先是进行业内调查,看 ...

  6. Node.js包管理器Yarn的入门介绍与安装

    FAST, RELIABLE, AND SECURE DEPENDENCY MANAGEMENT. 就在昨天, Facebook 发布了新的 node.js 包管理器 Yarn 用以替代 npm .咱 ...

  7. Node.js、express、mongodb 实现分页查询、条件搜索

    前言 在上一篇Node.js.express.mongodb 入门(基于easyui datagrid增删改查) 的基础上实现了分页查询.带条件搜索. 实现效果 1.列表第一页. 2.列表第二页 3. ...

  8. Node.js、express、mongodb 入门(基于easyui datagrid增删改查)

    前言 从在本机(win8.1)环境安装相关环境到做完这个demo大概不到两周时间,刚开始只是在本机安装环境并没有敲个Demo,从周末开始断断续续的想写一个,按照惯性思维就写一个增删改查吧,一方面是体验 ...

  9. node.js和express.js安装和使用步骤 [windows]

    PS: NODEJS:https://nodejs.org NPM:https://www.npmjs.com/ 一.node.js安装与配置 到https://nodejs.org/en/downl ...

  10. Node.js基于Express框架搭建一个简单的注册登录Web功能

    这个小应用使用到了node.js  bootstrap  express  以及数据库的操作 :使用mongoose对象模型来操作 mongodb 如果没了解过的可以先去基本了解一下相关概念~ 首先注 ...

随机推荐

  1. Linux 进程打开最大文件连接数Too many open files

    首先出现这个提示的原因:应用程序打开的文件数量超过了系统设定值. 如何查看当前系统每个用户最大允许打开文件数量: [root@registry ~]# ulimit -a core file size ...

  2. ZYNQ生成一个工程的基本步骤

    Zynq 7000 SoC 是业界首款All Programmable SoC 组成: PL(FPGA部分) PS(ARM部分) PL和PS数据传输的 高效接口:AXI和ACP PS: 处理系统(Pr ...

  3. Django1.11 添加markdown语法支持

    pip install markdown 在view.py 的视图界面:导入,圈起来的那两个包 对post进行处理, models.py 详情如下  测试,效果如图

  4. 12.9 supper

    Super super的注意事项 super可以用来在子类中访问父类的public属性或方法,super只能出现在子类中. super()调用的是父类的默认无参构造,super(参数)可以调用父类的有 ...

  5. Idea集成CSSO插件压缩css文件

    首先需要本地已安装node环境,并且csso-cli已通过npm安装到本地目录,只要能找到就行. 1. 打开Settings配置,确认图中的 File Watchers 插件是否已存在,如果不存在,去 ...

  6. 使用过 Redis 做异步队列么,你是怎么用的?

    答:一般使用 list 结构作为队列,rpush 生产消息,lpop 消费消息.当 lpop 没有 消息的时候,要适当 sleep 一会再重试. 如果对方追问可不可以不用 sleep 呢? list ...

  7. 深入理解Java虚拟机-垃圾收集算法

    一.判断对象是否可进行回收 1.引用计数算法 给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1:当引用失效时,计数器值就减1:任何时刻计数器为0的对象就是不可能再被使用的.但是主流的 ...

  8. SpringDataJdbc使用数据库默认值的解决方法

    SpringDataJdbc提供了 @ReadOnlyProperty 注解,这会造成由Repository保存的实体会忽略这个字段的值进行保存,进而采用数据库的默认值操作:而查询时这个字段也是能够查 ...

  9. MySQL 中有哪几种锁?

    1.表级锁:开销小,加锁快:不会出现死锁:锁定粒度大,发生锁冲突的概率最高,并发度最低. 2.行级锁:开销大,加锁慢:会出现死锁:锁定粒度最小,发生锁冲突的概率最低,并发度也最高. 3.页面锁:开销和 ...

  10. 破界!Omi生态omi-mp发布,用小程序开发生成Web

    omi-mp 是什么 Omi 框架是微信支付线研发部和 AlloyTeam 开源的通用 Web 组件化框架,基于 Web Components,用来开发 PC.手机浏览器或者微信.手Q webview ...