Node.js学习记录(一)

目录

一、文件读取 readFile

二、写入文件 writeFile

三、动态路径 __dirname:表示当前文件所处的目录、path.join

四、获取路径文件名 path.basename

五、提取某文件中的css、JS、html

六、http

七、启动创建web服务器

服务器响应

八、将资源请求的 url 地址映射为文件的存放路径

九、模块

模块加载

模块作用域

模块加载机制

十、包

1、下载安装包

2、导入三方包并使用

3、包的管理

4、一次性安装所有包 

5、卸载包

6、开发节点 devDependencies

7、解决下载包慢问题

8、包的分类

9、包的规范

10、开发自己的包

模块化拆分

使用说明文档 README.md

11、发布包

①、注册账号

②、登录npm账号

③、发布

④、删除已发布的包


记录一下从B站学习node过程~

练习文件目录结构:myproject/node.js、1.txt、testnode空文件夹

1.txt文件内容:Hello node.js    node.js内容如下

一、文件读取 readFile

//node.js
//读取文件内容 fs.readFile()
const fs = require('fs')//导入fs模块
/*
  参数一:文件路径
  参数二:编码格式(可选参数)
  参数三:回调函数(失败、成功)如读取成功err返回null,读取失败err返回错误信息,data返回undefined
*/
fs.readFile('./1.txt', 'utf-8', (err, data) => {
  console.log('err',err)
  console.log('data',data)
})

文件读取成功和失败运行结果

二、写入文件 writeFile

//node.js
const fs = require('fs')//导入fs模块,调用fs.writeFile()写入文件
/*
  参数一:文件路径
  参数二:写入内容
  参数三:回调函数(失败、成功)如读取成功err返回null,读取失败err返回错误信息,data返回undefined
*/
fs.writeFile('./2.txt', 'HELLO NODE.JS', (err) => {
  console.log('写入文件 err',err)
})

运行成功和失败的结果,在myproject目录下创建了2.txt,并写入内容HELLO NODE.JS,如果在电脑不存在的a盘下创建则会失败并返回错误信息

三、动态路径 __dirname:表示当前文件所处的目录、path.join

防止路径拼写或过长不利维护等问题,用node提供的__dirname 动态拼写路径

const fs = require('fs')
const path = require('path')//导入path模块,调用path.join()拼接路径

//拼接:__dirname+'/1.txt'  或者使用模板字符串:`${__dirname}/1.txt`
//一般不推荐这样写,可以用node提供的path.join
//fs.readFile(`${__dirname}/1.txt`, 'utf-8', (err, data) => {

//推荐用这种方式
fs.readFile(path.join(__dirname,'/1.txt'), 'utf-8', (err, data) => {
  console.log('目录:', __dirname)
})

四、获取路径文件名 path.basename

const fs = require('fs')//导入fs模块,调用fs.readFile()读取文件
const path = require('path')//导入path模块,调用path.join()拼接路径

const forexample = 'E:/Desktop/前端/myproject/1.html'
console.log('获取文件名称:',path.basename(forexample))
console.log('获取不带后缀的文件名称:',path.basename(forexample,'.html'))

运行结果得到文件名称

五、提取某文件中的css、JS、html

新建一个与node.js同级的newHtml.html文件

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,user-scalable=no,minimum-scale=1,maximum-scale=1,viewport-fit=cover">
<title></title>
<link href="https://res.5i5j.com/wap/tools/common.js.css?t=1716465786" rel="stylesheet" type="text/css">
<link href="https://res.5i5j.com/wap/tools/jisuan.css?t=1716465786" rel="stylesheet" type="text/css">
<style>
*{font-size:16px;}
.test{height:100px;margin-bottom:10px;}
.test div{width:300px;height:60px;line-height: 60px;background: pink;}
</style>
</head>

<body class="test">
<div>这是一个新的 html</div>
<script>
function test(){
    console.log('hello newHtml')
}
</script>
</body>
</html>

const fs = require('fs')//导入fs模块,调用fs.readFile()读取文件
const path = require('path')//导入path模块,调用path.join()拼接路径

/*
\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]
\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]
*/
/*正则定义匹配页面中的style和script标签*/
const regStyle = /<style>[\s\S]*<\/style>/
const regScript = /<script>[\s\S]*<\/script>/

fs.readFile(path.join(__dirname,'/input.html'),'utf-8',(err,data)=>{
  if(err) return console.log('读取html文件失败',err.message)
  // console.log('读取html文件成功',data)
  resolveCSS(data)

})
//获取CSS内容
function resolveCSS(htmlStr){
  const r1 = regStyle.exec(htmlStr)
  const newSty = r1[0].replace('<style>','').replace('</style>','')
  console.log('newSty==',newSty)
}
//获取JS内容
function resolveJS(htmlStr){
  const r1 = regScript .exec(htmlStr)
  const newJS = r1[0].replace('<script>','').replace('</script>','')
  console.log('newJS==',newJS)
}
//获取html
function resolveHtml(htmlStr){
   //直接获取html
  // const newHtml = htmlStr.replace(regStyle,'').replace(regScript,'')
  //获取html,把新创建的css和js引入
  const newHtml = htmlStr.replace(regStyle,'<link rel="stylesheet" href="./output.css">').replace(regScript,'<script src="./output.js"></script>')
  console.log('newHtml==',newHtml)
  fs.writeFile(path.join(__dirname,'/testnode/output.html'),newHtml,(err)=>{
    if(err) return console.log('写入html文件失败',err.message)
  })
}

运行得到(注:先自己新建目录testnode空的文件夹)把得到的内容写入到新的文件中,如下

(r1 是一个数组)

六、http

域名 & 域名服务器(DNS,domain name server):IP 和 域名一 一对应,存这份关系的电脑就是域名服务器,

比如ping jd.com  得到的IP 和 jd.com 这就是一 一对应的关系

域名就是IP的别名,辅助人们记忆的;域名和IP的对应关系存放在域名服务器上(在浏览器中输入一个域名,会先经过域名服务器的地址转换,域名转换成IP,然后再进行访问)

端口号

每个端口号不能被多个web服务占用,实际应用中只有80端口可以省略不写

端口号就是一串数字,好比门牌号,可以在整个楼中准确的找到对应

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/873139.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ARM基础知识---CPU---处理器

目录 一、ARM架构 1.1.RAM---随机存储器 1.2.ROM---只读存储器 1.3.flash---闪存存储器 1.4.时钟&#xff08;振晶&#xff09; 1.5.复位 二、CPU---ARM920T 2.1.R0~R12---通用寄存器 2.2.PC程序计数器 2.3.LR连接寄存器 2.4.SP栈指针寄存器 2.5.CPSR当前程序状态寄存…

【CSS in Depth 2 精译_024】4.2 弹性子元素的大小

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第一章 层叠、优先级与继承&#xff08;已完结&#xff09; 1.1 层叠1.2 继承1.3 特殊值1.4 简写属性1.5 CSS 渐进式增强技术1.6 本章小结 第二章 相对单位&#xff08;已完结&#xff09; 2.1 相对…

文本分类场景下微调BERT

How to Fine-Tune BERT for Text Classification 论文《How to Fine-Tune BERT for Text Classification?》是2019年发表的一篇论文。这篇文章做了一些实验来分析了如何在文本分类场景下微调BERT&#xff0c;是后面网上讨论如何微调BERT时经常提到的论文。 结论与思路 先来看…

海外云手机是否适合运营TikTok?

随着科技的迅猛发展&#xff0c;海外云手机逐渐成为改变工作模式的重要工具。这种基于云端技术的虚拟手机&#xff0c;不仅提供了更加便捷、安全的使用体验&#xff0c;还在电商引流和海外社媒管理等领域展示了其巨大潜力。那么&#xff0c;海外云手机究竟能否有效用于运营TikT…

MDC实现日志链路追踪

MDC是基于Slf4j的 MDC是什么:&#xff08;简单理解&#xff09;线程上下文 日志链路追踪解决了什么&#xff1a;1:增强了代码的调试机制2&#xff1a;重点&#xff1a;实现了 多线程环境下 代码链路追踪 基础版本&#xff08;不涉及异步&#xff09; 1&#xff1a;引入日志依赖…

计算机网络 第2章 物理层

文章目录 通信基础基本概念信道的极限容量编码与调制常用的编码方法常用的调制方法 传输介质双绞线同轴电缆光纤以太网对有限传输介质的命名规则无线传输介质物理层接口的特性 物理层设备中继器集线器一些特性 物理层任务&#xff1a;实现相邻节点之间比特&#xff08;0或1&…

鸿蒙开发5.0【Picker的受限权限适配方案】

Picker由系统独立进程实现&#xff0c;应用可以通过拉起Picker组件&#xff0c;用户在Picker上选择对应的资源&#xff08;如图片、文档等&#xff09;&#xff0c;应用可以获取Picker返回的结果。 类型受限权限使用的picker音频ohos.permission.READ_AUDIO&#xff0c;ohos.p…

Java JVM 垃圾回收算法详解

Java 虚拟机&#xff08;JVM&#xff09;是运行 Java 应用程序的核心&#xff0c;它的垃圾回收&#xff08;Garbage Collection, GC&#xff09;机制是 JVM 中非常重要的一个部分。垃圾回收的主要任务是自动管理内存&#xff0c;回收那些不再被使用的对象&#xff0c;从而释放内…

linux编译器——gcc/g++

1.gcc linux上先要安装&#xff0c; sudo yum install gcc gcc --version 可以查看当前的版本 &#xff0c;我们默认安装的是4.8.5的版本&#xff0c;比较低&#xff0c; gcc test.c -stdc99 可以使他支持更高版本的c标准 -o 可以殖指明生成文件的名字&#xff0c;可以自己…

自用NAS系列1-设备

拾光坞 拾光坞多账号绑定青龙面板SMBWebdav小雅alist下载到NASDocker安装迅雷功能利用qBittorrentEEJackett打造一站式下载工具安装jackett插件 外网访问内网拾光客户端拾光穿透公网ipv6路由器配置ipv6拾光坞公网验证拾光坞域名验证 拾光坞 多账号绑定 手机注册拾光坞账号&am…

解决面板安装Node.js和npm后无法使用的问题

使用面板&#xff08;BT&#xff09;安装Node.js和npm后&#xff0c;可能会遇到如下问题&#xff1a;即使成功安装了Node.js和npm&#xff0c;服务器仍提示“未安装”&#xff0c;在命令行中使用 node -v 或 npm -v 也没有任何响应。这种问题通常是由于环境变量配置错误或路径问…

设置Virtualbox虚拟机共享文件夹

由于工作环境的原因&#xff0c;选择Virtualbox的方式安装虚拟操作系统&#xff0c;常用的操作系统为ubuntu&#xff0c;不知道道友是否也曾遇到这样的问题&#xff0c;就是虚拟机和主机进行文件拖拽的时候&#xff0c;会因为手抖造成拖拽失败&#xff0c;虚拟机界面显示大个的…

触想全新Z系列工控机扩展IIoT应用潜能

8月31日&#xff0c;触想重磅推出全新Z系列高性能、扩展型工控机——TPC05/06/07-WIPC&#xff0c;提供标准版/双卡槽/四卡槽3款机型选择。 作为边缘计算、机器视觉、AI智能和工业应用的理想机型&#xff0c;Z系列工控机支持Intel第12/13/14代Core™ i3/i5/i7/i9处理器&#xf…

鸿蒙Next-拉起支付宝的三种方式——教程

鸿蒙Next-拉起支付宝的三种方式——教程 鸿蒙Next系统即将上线&#xff0c;应用市场逐渐丰富、很多APP都准备接入支付宝做支付功能&#xff0c;目前来说有三种方式拉起支付宝&#xff1a;通过支付宝SDK拉起、使用OpenLink拉起、传入支付宝包名使用startAbility拉起。以上的三种…

顶踩Emlog插件源码

源码介绍 顶踩Emlog插件源码 前些天看到小刀娱乐网的文章页面有了一些变化&#xff0c;那就是增加了一个有价值/无价值的顶踩按钮。 样式也是非常的好看 再加上两个表情包是非常的有趣。 写到了Emlog系统&#xff0c;效果如上图。 如何使用&#xff1a; 需要在echo_log.…

(二)ASP.NET Core WebAPI项目的启动地址设置

上一篇介绍了ASP.NET Core WebAPI项目创建&#xff0c;可参考&#xff1a; 1.webAPI的访问地址 1) 启动时&#xff0c;选择CoreWebAPI(项目名称)运行项目 可以看到打开浏览器后的地址是&#xff1a;applicationUrl"\"launchUrl 2) 启动时&#xff0c;选择IIS Expre…

ELK学习笔记(一)——使用K8S部署ElasticSearch8.15.0集群

一、下载镜像 #1、下载官方镜像 docker pull elasticsearch:8.15.0 #2、打新tag docker tag elasticsearch:8.15.0 192.168.9.41:8088/new-erp-common/elasticsearch:8.15.0 #3、推送到私有仓库harbor docker push 192.168.9.41:8088/new-erp-common/elasticsearch:8.15.0二、…

一文理解粒子滤波

0. 粒子滤波流程 之前学习记录的文档&#xff0c;这里也拿出来分享一下~ 基本原理&#xff1a;随机选取预测域的 N NN 个点&#xff0c;称为粒子。以此计算出预测值&#xff0c;并算出在测量域的概率&#xff0c;即权重&#xff0c;加权平均就是最优估计。之后按权重比例&…

英文翻译工具怎么选?这4款值得收藏。

英语作为国际通用语言&#xff0c;在我们的日常生活中一直有着很重要的地位&#xff0c;往大了说可以促进国际交流&#xff0c;实现文化传播&#xff1b;往小了说&#xff0c;可以解决很多生活中的小问题。但是在很多情况下英文仍旧是我们一个语言障碍&#xff0c;所以好的翻译…

网络学习-eNSP配置ACL

AR1路由器配置 <Huawei>system-view Enter system view, return user view with CtrlZ. [Huawei]undo info-center enable Info: Information center is disabled. [Huawei]interface gigabitethernet 0/0/0 [Huawei-GigabitEthernet0/0/0]ip address 192.168.2.254 24 …