最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 后端-Node系列二:npm模块加载机制

    正文概述 掘金(微微猫)   2020-12-26   508

    npm 官网

    1: 模块/第三方包

    后端-Node系列二:npm模块加载机制

    //----------------------  什么是包 ---------------------
    第三方模块就叫做包,就像计算机与电脑一样
    
    //----------------------  包的来源 ---------------------
    由第三方团队开发出来, 供团队使用。node.js中的包都是开源免费的
    
    //----------------------  为什么需要包 ---------------------
    包是基于内置内置模块开发出来的,类似于js于jquery,提供了更高级和更方便的API, 极大的提高了开发效率。
    
    //----------------------  从哪里下载包 ---------------------
    从npm上下载,全球最大包共享平台, 1100W开发者,120万个包
    

    2: npm

    2.1: 体验使用第三方包格式化日期

    后端-Node系列二:npm模块加载机制

    //--------------------------- 格式化时间的传统做法 ---------------------------
    自己封装格式化日期函数,然后向外导出去
    别的页面导入即可,但是自己写格式化时间函数,效率不够高,
    
    //--------------------------- 使用第三方的包对时间进行格式化 ---------------------------
    第三方包的使用流程
    1: 下载包
    2:导入包
    3:调用包的方法,快速完成开发
    

    2.2: 包的安装和使用

    后端-Node系列二:npm模块加载机制

    //-------------------- 如何使用npm install命令安装具体的包 -----------------------
    全写方式:npm install xx   简写形式: npm i xx
    
    //-------------------- 如何使用npm install命令安装具体的包 -----------------------
    安装包后,去npm查看怎么使用
    1: 搜索包名
    2:Doucmentation 查看使用的说明文档
    3:一个字母表示不补0, 2个字母表示补0
    【具体使用方法:导入包, 调用包的format方法,传入字符串格式,接收返回结果,打印查看, 格式化日期成功】
    
    //-------------------- 如何使用npm install命令安装具体的包 -----------------------
    多了2个文件,一个node_modules文件夹和package-lock.json文件的作用,一个package-lock.json
    1: node_modules文件夹 : 用来存放包的
    2: package-lock.json 文件:用来记录包的个人信息的
    
    //-------------------- 如何使用npm install命令安装具体的包 -----------------------
    npm i 包名@版本号,即可下载2对应版本的
    
    //-------------------- 如何使用npm install命令安装具体的包 -----------------------
    版本号的说明:
    1: 大版本号
    2:功能版本
    3: Bug修复版本
    版本升级规则, 只要前面的版本号增长了,后面的版本号归0
    

    3: 包管理配置文件及解决下包慢的问题

    3.1: package.json作用

    后端-Node系列二:npm模块加载机制

    //----------------------- package.json包管理配置文件 - 概念 -----------------------------
    packgae.json包管理配置文件,记录包相关的配置信息
    1:名称+版本号,描述
    2:项目中都用到了哪些包
    3:哪些包只在开发期间会用到
    4:哪些包在开发和项目部署时都需要用到
    
    //----------------------- 进一步理解package.json配置文件的作用 -----------------------------
    package.json的作用
    1:我们一般会在共享代码时,会把node_modules文件夹删除
    2:会在项目中初始化一个包记录文件, 叫package.json【npm init -y】
    3:今后开发中,一定要把node_modules添加到.gitignore文件中,太大,太耗时
    
    //----------------------- 通过命令快速创建package.json文件 -----------------------------
    package.json的注意事项
    1: 初始化记录文件: 在英文项目下 npm init -y 
    2:注意事项:中文项目和项目名称带空格都市不合法的,会报错
    

    3.2: dependencies的作用

    后端-Node系列二:npm模块加载机制

    dependencies包名记录
    同时安装多个包 每个包名用 空格 隔开包名即可同时下载多个包: npm i jquery art-template
    

    3.3: devDependencies的作用

    后端-Node系列二:npm模块加载机制

    上线就不用的包,在下载的时候可以 --save-dev,也可以简写 -D,就会保存到devDependencies中,上线时就不会用到
    

    3.4: 安装所有的包和卸载指定的包

    后端-Node系列二:npm模块加载机制

    //---------------------------- 一次性安装所有的包 --------------------------
    一般我们下载的项目里面是没有node_modules文件夹的,此时运行 node xx文件名的时候, 会报错。 提示找不到xx包名。 此时选用安装此包,才能解决报错
    1: 找不到包: Error: Cannot find module '包名'
    2:一次性安装所有包: npm i 
    
    //---------------------------- 卸载指定的包 --------------------------
    uninstall 会把 depndencies中的包名移除掉, 因为已经删除了
    如果包名不存在,页面有引入了改包, 会报错:Error: Cannot find modules '包名'
    

    3.5: 切换npm的下包镜像源

    后端-Node系列二:npm模块加载机制

    //------------------------------- 分析下包速度慢的原因 ------------------------------
    下载包慢点原因就是数据是从海外的海底光缆下载过来的,所以很慢
    
    //------------------------------- 了解淘宝npm镜像服务器的作用 ------------------------------
    解决方式是淘宝包国外的包,同步到自己服务器上,形成镜像,所以我们访问淘宝的服务器会非常的快
    
    //-------------------------------  切换npm的下包镜像源 ------------------------------
    查看下包镜像源 : npm config get registry 
    切换为淘宝镜像源 : npm config set registry=https://registry.npm.taobao.org/
    检测切换是否成功: npm config get registry 
    
    //------------------------------- 使用nrm切换下包的服务器 ------------------------------
    使用nrm快速切换下载路线
    npm i nrm -g 全局安装
    nrm ls 查看下载地址
    nrm use tanbao 切换路线
    

    4: 包的分类

    后端-Node系列二:npm模块加载机制

    //------------------------------- 项目包 ----------------------------
    npm i 包名 -D 会把包安装在开发依赖中, 开发用上线不用
    npm i 全局包, 开发上线都需要全局使用
    
    //------------------------------- 全局包 ----------------------------
    全局安装的包,一般是工具类型的包, 他会下载到C/Users/adminnistor/Appdata/Roaming/npm/node_modules
    卸载方式是: npm uninstall 包名 -g
    
    //--------------------- 演示i5ting_toc的安装和使用 --------------------
    1: 如何安装 npm i -g i5ting_toc 全局安装
    2:用它将md文件转换为html5页面文件:i5ting_toc -f 要转换的文件名 -o. 转换后会自自动打开页面。【注意安装插件后, 转换前需要切换到要转文件的目录中,才能转】
    
    //------------------------------- 包的规范结构 ----------------------------
    每个包都有自己的package.json文件, 文件中的main就叫包的入口文件。他会指向真实调用了哪个文件
    

    5: 模块的加载机制

    后端-Node系列二:npm模块加载机制

    //--------------------------- 优先从缓存中加载 -----------------------------
    模块在第一次加载后就会被缓存其阿里, 如果多次导入模块, 只会出发一个,他只会把缓冲区的那个拿出来。所以只会调用1次
    
    //--------------------------- 内置模块的加载机制 -----------------------------
    如果自己有一个同名的包,和第三方下载进来的包,重命名冲突了, node只会引入自己的包, 因为自己的优先级最高
    
    //--------------------------- 自定义模块的加载机制 -----------------------------
    加载自己的模块, 必须加上./或者../, 让node知道是自己写的模块
    如果不加上./, node会把他当做第三方的引入,去查找,结果就报错
    
    node加载模块的顺序、
    1:加载自己的全名的文件,如果文件省略了后缀名, 就会依次加载了
    2: 加载.js拓展名
    3:加载.json拓展名
    4:加载.node 拓展名【32位的应用程序】
    5:加载失败
    
    //---------------------------  第三方模块的加载机制 -----------------------------
    第三方模块加载机制
    如果require不是内置模块,也没有有./或者../去指定它加载自哪里。 node则会按照自己查找规则, 从自己的父目录node_modules中去加载,
    举例: 在C:\Users\itheima\project\foo.js文件里调用了 require('tools'), node会按照以下规则查找
    1: C:\Users\itheima\project\node_modules\tools
    2:C:\Users\itheima\nodd_modules\tools
    3:C:\Users\node_modules\tools
    4:   C:\node_modules\tools
    最终报错【了解第三方模块的加载机制即可】
    
    //--------------------------- 目录作为模块时的加载机制 -----------------------------
    第三方加载模块机制
    如果在页面中引入了一个目录文件夹, 他会去该目录下按一下规则查找
    1: 去package.json中找:main:xx.js
    2:如果main没有,或者package.json被删除了,就会去该目录下,找index.js
    3:如果index.js也没有, 就会报错了
    

    6: 开发属于自己的包

    6.1:了解需要实现的功能

    后端-Node系列二:npm模块加载机制

    //------------------------ 包的实现功能:---------------------------------
    1:能将特殊的html标签当做文本去渲染, 而不是把他当做html元素去渲染
    2:能把刚才转换成普通字符串,再转回来成一个html标签,
    【就是转换和还原的功能】
    

    6.2 初始化包结构和package.json配置

    后端-Node系列二:npm模块加载机制

    //------------------------ 初始化包的基本结构 -----------------------------
    新建文件夹:itheima-tools/
    package.json包管理配置文件
    index.js 包入口文件
    README.md 包的说明文件
    
    //------------------------ 初始化包的基本结构 -----------------------------
    package.json中的每一项
    name: 包名
    version: 版本号
    main: 入口文件
    description: 搜索时的提示title信息
    keywords:关键词【】类似于京东的关键词
    license: ISC 开源许可协议
    

    6.3: index.js中定义格式化时间的方法 + 还原及转义HTML的方法

    后端-Node系列二:npm模块加载机制

    // ---------------------- 在index.js中定义格式化时间的方法 -------------------------------
    在index.js中定义一个方法
    定义好后,将他导出去
    创建一个测试文件,来测试我们是否能格式化成功
    
    // ----------------------了解package.json中main属性的作用 -------------------------------
    如果把./itheima-tools后面的/index.js给删除掉
    他也能通过package.json中main指向了index.js。也能正确找到index.js
    
    // ---------------------- 在index.js中定义转义HTML的方法 -------------------------------
    将符号转换为字符串
    在index.js中定义了一个js方法, 将传进来的字符串用正则表达式来进行替换,match是匹配到得结果。在switch中判断匹配到的结果, 如果匹配到的是小于字符串,就用return去替换掉
    测试是否能够转换成功: 在test.js中就能看到的结果。匹配后成功将符号转换为字符串
    
    // ---------------------- 在index.js中定义还原HTML的方法 -------------------------------
    定义行html字符串还原回标签的方法
    就是传进来的数据调用了replace方法,用正则表达式将他替换, math就是替换的结果, 用switch判断如果, 匹配到的结果包含改字符串,就将改字符串替换为html标签
    

    将不同的功能进行模块化的拆分

    后端-Node系列二:npm模块加载机制

    //--------------------------- 将不同的功能进行模块化的拆分 ------------------------------
    将不同方法单独抽离, 再导出,index用拓展运算符拿到3每个方法
    将2个方法抽离到src文件夹中, 形成单独的文件, 每个单独的文件必须把自己的方法给导出去。
    在index.js入口文件中, ...展开运算符,能拿到该页面中导出的方法。 有几个拿几个。
    经过测试,还是能转换成功。证明抽离正确
    

    编写包的使用说明文档

    后端-Node系列二:npm模块加载机制

    //------------------------ 编写包的使用说明文档 --------------------------------
    编写自己的readme说明文件, 没有强制要求, 只要能描述怎们清楚使用就行了
    1; 如何安装
    2:如何导入
    3:使用导入文件中的方法, 这些方法如何使用
    4:以及该方法处理后的结果
    5:开源协议: ISC
    

    下一篇:后端-Node系列三:Express框架


    起源地下载网 » 后端-Node系列二:npm模块加载机制

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元