当前位置: 首页 > Web前端 > JavaScript

node.js-package,express

时间:2023-03-27 17:05:18 JavaScript

首先在这里分享一下我的喜悦。从昨天开始,我一直很快乐。我收到了我的第一份报价。第一桶金还是舒服的,虽然我还没有收到第一桶金哈哈,但是offer应该快了。今天的内容有点少,慢慢说吧1、首先我们看到包管理配置文件和下载慢的问题。多人合作,我们是不是应该经常通过git,github等分享我们的代码,那我应该会发现一个问题,一个项目文件有30M大小,而代码只有2M左右的内存,谁来给其余的部分?都是给第三方包的,也就是node_modules里面的内容,所以为了轻量级,我们在分享代码的时候一定不要带上node_modules文件夹,把她扔到.gitignore文件里忽略掉,那么我们就有了nosecond三方包的依赖是如何执行代码的?第三方包肯定还是需要的,但是没办法。我们有一个package.json文件,其中存储了所有已安装的第三方包的内容。1.1快速创建packagejson,只需要在项目文件中执行nodeinit-y即可。请注意,您只能在英文目录中创建此文件。这里的英文是指当前目录是英文的,也就是上层是中文无所谓,然后我们运行npmi安装第三方包的时候,这个json文件就会得到信息,所以我们需要在安装前创建json文件。1.2dependenciesnode这个是这个json中的节点名,记录了npm安装了哪些包1.3既然我们没有包,知道所有需要的包名,那么如何一次安装所有的包呢?npminstall或者i可以不加包名安装所有包1.4卸载包npmuninstall包名不简写1.5devDependencies节点这个节点也是保存安装包。一些包允许我们开发将在线使用的包。我们一般把前者放在devDependencies节点,后者放在dependencies节点。当然他也有具体的安装方法npmi包名-D2。然后我们看到一些包下载会慢的原因,因为我们的npm服务器是国外的,通过海底光缆传输的数据当然慢,所以这个时候我们需要更换npm镜像服务器。可以通过npmconfigsetregistry查看当前的npmserver,然后通过npmconfigsetregistry='淘宝或者腾讯的镜像地址'进行设置。这样做的原因是因为我们有一种简单的方法可以通过npm安装一个nrm全局工具。需要在包名后面加一个-g然后nrmls查看当前可以设置的服务器地址,然后用nrmuse添加这个服务器名即可使用。3.包分类我们将包分为两类,一类是项目包,也就是安装在node_modules中的包,还有放在devDependencies节点中的开发依赖包和可以用于开发和上线的核心依赖包,二是全局包,放在c盘目录下,安装时通过-g参数安装。注意:全局安装只需要工具包,因为它们提供了一些终端命令3.1i5ting_toc可以将md文件转换成html的小工具。请注意,它是一个工具。这个其实很方便,我也一直在用。降价垫2。如何使用它?i5ting_toc-fmd文件路径-o表示浏览器打开3.2一个规范包的结构必须包含三个东西①每个包必须是一个单独的目录②包的顶层目录必须包含package.json③packag.json必须包含name,version,main三个属性接下来我们自己做一个封装:要实现的功能是:日期可以格式化,html中的字符可以转义为特殊字符并转回去。首先初始化包的基本结构,创建包文件夹,里面放三个文件,index.js、package.json、README.md分别代表包入口文件、包配置文件、包描述文档。接下来初始化package.json的内容,{name:到时候会在npm网站上搜索我们包的名称,所以使用前先去网站看看有没有重名,version:版本号,main:入口文件,可见我们的import是针对这个文件的。如果说外界导入的时候只导入了一个目录,不是js文件,那么node会在这个目录下找到package.json中的main然后进入入口文件,说明:详细介绍,关键字:keywords是一个数组,license:开源协议}接下来就是在index.js中定义三个函数,这里有一个很重要的概念,Modularization,是否需要一个函数格式化时间,另一个函数补零?那么这两个函数就可以放在单独的js文件中,我们的html转特殊字符和特殊字符返回html也需要单独的js文件。完成后需要把函数放到各自文件中的exports中,然后index.js导入两个js文件。你此时得到的是一个具有这些功能的对象。我们需要通过es6语法中的扩展算法进行解构,只有逗号分隔的函数。这里有点乱,看代码就明白了。//1.格式化时间functiondateFormat(time){constdate=newDate(time)lety=date.getFullYear()letm=getZero(date.getMonth()+1)letd=getZero(date.getDate())让h=getZero(date.getHours())让mm=getZero(date.getMinutes())让s=getZero(date.getSeconds())返回`${y}-${m}-${d}${h}:${mm}:${s}`}//2.零填充函数functiongetZero(n){returnn<10?'0'+n:n}//6.1共享成员模块.exports={dateFormat}//4.html转义函数functiongetHtmlCode(htmlStr){returnhtmlStr.replace(/<|>|"|&/g,match=>{switch(match){case'<':return'<'case'>':return'>'case'"':return'"'case'&':return'&'}})}//5.恢复html函数getHtml(htmlStr){returnhtmlStr.replace(/<|>|"|&/g,match=>{switch(match){case'<':return'<'case'>':return'>'case'"':return'"'case'&':return'&'}})}//6.2共享成员module.exports={getHtmlCode,getHtml}index.js//6.3importconstdate=require('./src/dateFormat')conststrEscape=require('./src/strEscape')//3.共享成员模块。exports={...date,...strEscape}test.jsconstbag=require('./index')console.log(bag.dateFormat(newDate()));console.log(bag.getHtmlCode('

我是大温柔“嘻嘻”ss&

'));console.log(bag.getHtml('

我是大温柔“嘻嘻”ss&

'));3.3我们继续看packagedescriptiondocument的写法,就是把package的作用、用法和注意事项说清楚,然后installnpmimybag-huangimportconstmybag=require('mybag-huang')formattimeconsttime=mybag.dateFormat(newDate())转义html代码中的特殊字符mybag.getHtmlCode('

我是大温柔“嘻嘻”ss&

')##对html代码中的正常字符进行转义mybag.getHtml('

我是大温柔“嘻嘻”ss&

')开源协议ISC3.4发布包先注册一个npm账号,然后在终端登录账号:npmlogin然后进入npmpbulish可以发布包的目录在npm网站上,但是注意,需要切换回官方服务器才能发布成功删除发布的包npmunpublish包名--force只能在包发布后72小时内删除,并且删除后24小时内不能发布同一个包4.模块加载机制我们的模块是先从缓存中加载的。当我们导入的时候,它会第一时间加载到缓存中,所以无论你导入多少次同一个文件,它都会被加载。第一个文件。内置模块加载机制加载内置模块的优先级最高。例如,如果一个内置模块与我们自定义的模块同名,那么导入时将被视为内置模块。自定义模块的加载机制要求require中的文件必须以./或../开头,否则会被视为内置或第三方模块。如果省略扩展名,那么node会开始依次搜索js、json、node的文件扩展名,如果找不到会报错。第三方模块的加载机制需要的不是内置模块,也不是。/开头,会从当前目录的modules文件夹中取出第三方模块,如果没有找到,会继续寻找下一层,直到找到根目录。当你使用目录作为require的路径时,它会先找到包中的main。如果不指定,会加载当前目录下的index.js并报错。5.express5.1首先什么是express?它与http内置模块相同。5.2创建web服务器的基本使用1.安装npmiexpress2。创建web服务器①importexpress②创建服务器constapp=express()③diaoyongapp.listen(端口号,回调函数)3.监听get,postapp.get/post(url,回调函数)//1.导入constexpress=require('express')//2.创建服务器constapp=express()//4.监听客户端的get和post请求并响应app.get('/index.html',(req,res)=>{res.send({"name":"zs","sex":"male","age":19})})app.post('/index',(req,res)=>res.send('postsucceeded'))//3.启动服务器app.listen(80,()=>{console.log('expressserverrunningathttp://127.0.0.1')})4获取parametersintheurl通过req.query获取一个对象保存的参数constexpress=require('express')constapp=express()app.get('/',(req,res)=>{res.send(req.query)})app.listen(80,()=>{console.log('expressserverrunningathttp://127.0.0.1');})获取url中的动态参数req.paramsconstexpress=require('express')constapp=express()app.get('/:id',(req,res)=>{console.log(req.params);})app.listen(80,()=>{console.log('expressserverrunningathttp://127.0.0.1');})5.3托管静态资源express。static()该方法可以共享创建静态服务器时文件目录下的css、图片、js等。app.use(express.static('folder'))注意这个目录是谁打开的是constexpress=require('express')constapp=express()app.use(express.static('./clock'))app.listen(80,()=>consolethatwillnotappearintheurlpath.log('expressserverrunningathttp://127.0.0.1'))如果你想托管多个目录,只需多次执行代码,但要注意如果访问的文件名有多个目录,前面的会依次执行。挂在路径前缀上co??nstexpress=require('express')constapp=express()app.use('/abc',express.static('./clock'))app.listen(80,()=>console.log('expressserverrunningathttp://127.0.0.1'))5.4今天更新的最后一个内容是一个非常实用的工具,nodemon是直接全局安装的,它的作用就是我们平时改代码,比如server必须断开再重连才能看到效果,会很麻烦。用这个工具,直接执行nodemon文件名,它会检测到我们的代码修改,自动重启,就像我们的htmllive一样