node項目的开发

01 创建package.json文件: 

npm init 创建一个package.json 项目描述的文件。package name : 包名version:版本description:项目描述entry point:入口文件 默认index.jstset command:测试命名git repository:对应github创库地址keywords:  关键字author:  作者license:"ISC"  开源协议

02  关于package.json文件中:"test":"echo\'xxxxxx'\" && exit 1"

执行 npm run test 会执行"echo\'xxxxxx'\" && exit 1"  最后输入 xxxxxx   exit的作用是将执行的命令结束掉。

03 开发依赖 生产依赖

package.json文件中:// 这里面所有的命令都是开发依赖 // 安装命令 npm install 包名 --save-dev 简写 npm i 包名 -DdevDependencies:{viet webpack rollup等} // 生产依赖 // npm i 包名 dependencies:{vue vuex router  md5 pinia}// 给编写插件或者编写npm包的开发人员使用的peerDependencies:{}

04 npm 相关执行的命令

npm config list 作用查看npm node版本 安装的目录地址等npm ls查看全局可执行的文件npm get registry查看镜像源npm config set registry http://taobao.xxxx设置镜像源

05 npm  install原理

执行 npm install 命令后:第一步 会去找config 也就是 打开终端 执行的npm config list第二步 会去找项目中的.npmrc的文件第三步 如果项目中没有.npmrc的文件就会去用户级的.npmrc (存在于C盘中/用户) 第四步 如果用户没有npmrc就会去全局的查找(存在C盘/AppData)第五步 如果全局的没有机会去npm内置的.npmrc第六步 然后再找项目中的package-lock.json文件第七步 如果有上面的这个文件就会和webpack.json进行对比。如果不一致以webpak.json为主更新lock。第八步 如果上面没有这个文件,就会获取包的信息 构建依赖树 进行下载

06 npm run 原理

执行npm run xxx后第一步 首先会去当前项目的目录下找node_modules/.bin/xxx文件 然后执行第二步 如果当前目录中没有相关的文件 就会去全局的node_modules下面去找、 也就是我们安装的有些命令使用的 npm i ts -g, 这个是把ts安装到了全局,并非当前的node_modeules。

07 npm声明周期

package.json文件中的命令"script":{"predev":"node reve.js","dev":"node index.js","postdev":"node post.js"}声明周期函数 predev  postdev 当执行npm run dev的时候 会先执行node reve.js 再执行 node index.js 最后执行npde post.js使用的场景 比如执行打包的命令的时候 可以先把dist目录清除 , 在打包完成后 执行发布的命令

08 npx  

第一种情况 npx节省磁盘的空间正常项目情况下 当我们想要创建一个react项目的使用需要使用使用到脚手架也就是create-react-app这时候我们会先安装脚手架,然后再用脚手架去创建项目,造成的问题脚手架安装完成以后占用磁盘的空间。当我们使用npx创建一个react项目的时候 不需要预先下载好脚手架 可以执行 npx create-react-app demo去创建项目,并且没有给磁盘空间下载脚手架。npx执行的原理: 首先会现在当前项目node_modules/去找脚手架如果没有就去全局的node_modules去找,如果全局的也没有,就是npmjs官网下载,下载完创建完项目再删掉。第二种情况 如果我们想要执行vite这个命令的话使用npm命令,不能直接执行npm vite, 需要在package.json中进行配置 dev:vite使用npx命令,可以直接运行 npx vite, 因为会直接查找node_modules/.bin/目录下的vite去执行

09 cjs与esm规范

package.json 文件中:{type:"commonjs"}语法 :require('fs') // 导入modulex.express = P  导出exporess{type:'module'
}import  xxx from './xx.js'export default = {}export  const fn = ()=>{}两者之间的区别:esm中的this是undefiend; cmj值是模块 {}cmj是同步的可以在逻辑中使用; esm是属于异步的不能在逻辑中编写if(true){require('./index.js')} 这是可以的, import就不可以了如果想要import在逻辑中使用的话 就需要使用函数式的方式导入了if(true){import('./index.js').then(res=>{cosnole.log(res)})}

10 全局的变量

node环境中没有DOM,BOM 没有window。global定义全局变量 任何模块都可以获取global.name = 'index'globalThis定义全局变量在浏览器和node都可以使用

11 filename与__dirname

如果我们在项目src/index.js文件中输入console.log(__dirname) // D/web/node/demo/src 到输出文件的目录console.log(__filename) // D/web/node/demo/src/index.js 到执行的文件了

12 prcoess.cwd() 可以获取当前文件执行的目录 相当于__dirname

13  process.exit() 杀死进程 :比如

index.js文件中执行命令:setTimeout(()=>{console.log('这里不会输出了')},5000)setTimeout(()=>{process.exit() // 将进程杀死了},2000)process.on('exit',()=>{console.log('进程被杀死了执行的')
})

14 CSR前端渲染   SSR服务端渲染   SEO: 爬虫在找的时候只会找html页面的不会找js, 前端渲染html的内容较少,不利于seo,服务端已经把整个html页面渲染完毕了。SEO讲究TDK,
T值得是title,D指的是<meta>标签的description描述。K:<meta  name="keywords"> 关键字

node环境中是无法创建和操作DOM因为不存在DOM,但是借助于jsDOM是可以的第一步 安装 npm i jsdom第二步 项目中使用const fs = require('fs')const {JSDOM} = require('jsdom')const root =  new JSDOM(`<DOCTYPE html><html><head></head><body><div id="app"></div></body><html/>`)// 请求一个接口 拿到数据填充到app里面 nodo18版本才能使用const window = root.window const document = window.document // 以上这两步主要用来操作DOM const app = document.queselector('#app')fetch('https://api.thecatapi.com/v1/images/search?  limit=10&page=1').then(res=>res.json()).then(data=>{ // 第一个then指定返回的格式data.forEach(item=>{const img = document.createElement('img')img.src = item.urlimg.style.width = '200px'img.style.height = '200px'app.appendChild(img)})console.log(root.serialize()) // 这里需要将root转化为字符串 这里就是整个拼接好的DOM结构// 创建一个index.html的页面并把内容写入进入fs.writeFileSync('./index.html',root.serialize())
})

15 path相关的知识点

import path = require('path')path.win32 可以指定电脑的系统path.basename 返回路径的最后一部分console.log(path.basename('./src/assets/index.html')) // index.htmlpath.dirname // 返回的是路径console.log(path.dirname('./src/assets/index.html')) // ./src/assets/path.extname // 返回扩展名  如果有多个点 返回的是最后的一个console.log(path.extname(index.css)) // .csspath.join // 拼接路径console.log('a','b') // a/bpath.resolve // 拼接路径  只能有一个跟目录 如果有多个只返回最后一个path.parse() // 将路径解析成一个对象{root:"/',dir:"/home/user/dir'base: 'file.txt',ext:'.txt'name: 'file'}path.format() // 将对象转化为一个路径

16 OS

const os = require('os')console.log(os.platform()) // 获取操作系统 win32  darwin macconsole.log(os.release()) // 系统的版本号  10.0.22632console.log(os.type()) // 也是获取操作系统console.log(os.version()) // 区分 家庭版 旗舰版等做一个案例 webpack 有一个设置 open:true 会自动打开浏览器 底层实现的原理  判断不同的电脑的系统 分别调用不同的shell的命令 打开浏览器 const {exec} = require('child_process')  exec 可以执行shell命令const platform = os.platform() const open = (url) => {if(platform === 'win32'){exec(`start ${url}`)}else if(){ // 执行其他版本的命令}}open('https://www.baidu.com')读取用户所在的目录 底层原理%suerprofile%  mac是$HOMEconsole.log(os.homedir()) 获取CPU架构 console.log(os.arch())获取cpu的信息console.log(os.cpu().length)获取网络信息console.log(os.networkInterfaces())

17 procee控制进程

process.platformconsole.log(process.platform) // win32  获取操作系统process.argvconsole.log(process.argv) // 获取执行命令 后面携带的参数比如: node index.js --version 上面的命令就会输出 ['F:\lNodejsllnode.exe','F:llprojectllnodelindex.js','--version'] process.cwd()console.log(process.cwd())  // 和 __dirname 一样process.memoryUsage()console.log(process.memoryUsage()) // 获取内存的信息process.exit()console.log(process.exit()) // 退出进程process.kill(process.pid)杀死进程env获取操作系统所有的环境变量console.log(process.env)  // 就是电脑系统中的环境变量通过cross-env可以设置环境变量 npm i cross-envpackage.json文件中进行配置“scripts”:{"dev":"cross-env NODE_ENV=dev  node index.js",  "build":"cross-env NODE_ENV=pro node index.js"}执行命令 npx cross-env NODE_ENV=production node index.js获取环境变量  console.log(process.env.NODE_ENV)

18 子进程 child_process

const {exec,execSync,spawn,spawnSync,execFile,execFileSync,fork} = require('child_process')exec属于异步的方法  execSync属于同步的方法exec可以执行shell命令 和软件进行交互exec('node -v',(err,stdout,stderr)=>{if(err){return err}console.log(stdout.toString())  得到的是buffer 需要转化为字符串 })const nodev = execSync('node -v').toString()  // 18execSync('start chrome https://www.baidu.com')  // 打开chrom浏览器百度execSync('QQ音乐.exe的地址') // 打开QQ音乐----------------------------------------------------------------------------------------spawn 没有字节上限的 因为返回的是个流 实时返回的  apawnSync用的比较少 const {stdout} = spawn('netstat')stdout.on('data',(msg)=>{console.log(msg.toString())})stdout.on('close',(msg)=>{console.log('结束了')})----------------------------------------------------------------------------------------execFile 可执行文件 执行脚本execFile(path.resolve(__dirname,'./bat.cmd'),null,(err,stdount)=>{console.log(stdout.toString())})----------------------------------------------------------------------------------------fork 只能接收js模块  开启一个子进程 同时可以通信const testProcess = fork('./test.js')testProcess.send('我是父进程') // 父进程给子进程发消息 testProcess.on('message',(msg)=>{console.log('接收子进程消息',msg)})test.js子进程的内容procee.on('message',(msg)=>{ // 子进程接收父进程消息console.log('接收到主进程的消息', msg)})process.send('我是子进程要发送给主进程的消息')可以把耗时的任务放到子进程里面去执行

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

rc_visard 3D Stereo Senso

1 简介 rc_visard 3D立体视觉传感器 支持的接口标准 GenICam Generic Interface for CamerasGigE Gigabit Ethernet 词汇表 SGM semi-global matching 半全局匹配 SLAM Simultaneous Localization and Mapping 即时定位与地图构建 2 安全 3 硬件规格 坐标系 rc_visar…

TypeScript 中 interface 和 type 的使用#记录

一、interface&#xff1a;接口 interface A{label: string; }const aa ((aObj: A) > {console.log(aObj.label);//123return aObj.label; })aa({label: 123}) 1、可选属性 interface A{label: string;age?: number; } 2、只读属性 interface A{label: string;age?:…

231 基于matlab的北斗信号数据解析

基于matlab的北斗信号数据解析&#xff0c;多通道和单通道接收到的北斗信号数据&#xff0c;利用接收到的北斗数据&#xff08;.dat .txt文件&#xff09;&#xff0c;进行解析&#xff0c;得到初始伪距&#xff0c;平滑伪距&#xff0c;载波相位&#xff0c;并计算其标准差&am…

翱途开发平台新手上路-体验APP移动手机办公

O2OA(翱途)开发平台拥有配套的移动办公APP&#xff0c;支持IOS和安卓端&#xff0c;用户可在连接O2云之后&#xff0c;使用APP使用移动办公。移动办公APP开放源代码&#xff0c;不会产生任何费用。本篇主要简单讲述初如何完成服务器连接O2云&#xff0c;实现移动办公。 一、先决…

Barnes-Hut t-SNE:大规模数据的高效降维算法

在数据科学和分析中&#xff0c;理解高维数据集中的底层模式是至关重要的。t-SNE已成为高维数据可视化的有力工具。它通过将数据投射到一个较低维度的空间&#xff0c;提供了对数据结构的详细洞察。但是随着数据集的增长&#xff0c;标准的t-SNE算法在计算有些困难&#xff0c;…

什么是IoT?

什么是IoT&#xff1f; IoT&#xff0c;即物联网&#xff08;Internet of Things&#xff09;&#xff0c;是通过信息传感设备和互联网将各种物品连接起来&#xff0c;实现智能化的识别、定位、跟踪、监控和管理的网络系统。 以下是关于IOT的一些详细解释&#xff1a; 基本概…

JVM之本地方法栈和程序计数器和堆

本地方法栈 本地方法栈是为虚拟机执行本地方法时提供服务的 JNI&#xff1a;Java Native Interface&#xff0c;通过使用 Java 本地接口程序&#xff0c;可以确保代码在不同的平台上方便移植 不需要进行 GC&#xff0c;与虚拟机栈类似&#xff0c;也是线程私有的&#xff0c;…

OCP Java17 SE Developers 复习题13

答案 D, F. There is no such class within the Java API called ParallelStream, so options A and E are incorrect. The method defined in the Stream class to create a parallel stream from an existing stream is parallel(); therefore, option F is correct, and o…

高斯溅射融合之路(一)- webgl渲染3d gaussian splatting

大家好&#xff0c;我是山海鲸的技术负责人。之前已经写了一个GIS融合系列。其实CesiumJS的整合有相当的难度&#xff0c;同时也有很多方面的工作&#xff0c;很难在几篇文章内写完&#xff0c;整个山海鲸团队也是投入了接近两年的时间&#xff0c;才把周边整套工具链进行了完善…

Linux中inode号与日志分析

一.inode号 1.inode表结构 元信息&#xff1a;每个文件的属性信息&#xff0c;比如&#xff1a;文件的大小&#xff0c;时间&#xff0c;类型&#xff0c;权限等&#xff0c;称为文件的元数据(meta data 元信息 ) 元数据是存放在inode&#xff08;index node&#xff09;表中…

Spring Kafka—— KafkaListenerEndpointRegistry 隐式注册分析

由于我想在项目中实现基于 Spring kafka 动态连接 Kafka 服务&#xff0c;指定监听 Topic 并控制消费程序的启动和停止这样一个功能&#xff0c;所以就大概的了解了一下 Spring Kafka 的几个重要的类的概念&#xff0c;内容如下&#xff1a; ConsumerFactory 作用&#xff1a;…

Opencv_2_ 图像色彩空间转换

ColorInvert.h 内容如下&#xff1a; #pragma once #include <opencv.hpp> using namespace std; #include <opencv.hpp> using namespace cv; using namespace std; class ColorInvert{ public : void colorSpaceInvert(Mat&image); }; ColorInvert.cpp…

高效过滤器检漏方法选择指南及关键注意事项一览

在生物制药企业中&#xff0c;高效过滤器&#xff08;HEPA&#xff09;的检漏工作是确保洁净室能够达到并保持设计的洁净级别的关键步骤。这关系到产品的质量和安全&#xff0c;因此必须遵循相关法规标准和操作流程。 关于北京中邦兴业 北京中邦兴业科技有限公司是一家国家高新…

element中file-upload组件的提示‘按delete键可删除’,怎么去掉?

问题描述 element中file-upload组件会出现这种提示‘按delete键可删除’ 解决方案&#xff1a; 这是因为使用file-upload组件时自带的提示会盖住上传的文件名&#xff0c;修改一下自带的样式即可 ::v-deep .el-upload-list__item.is-success.focusing .el-icon-close-tip {d…

基于SpringBoot的宠物领养网站管理系统

基于SpringBootVue的宠物领养网站管理系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBootMyBatis工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 主页 宠物领养 宠物救助站 宠物论坛 登录界面 管理员界面 摘要 基于Spr…

1.C++入门

目录 1.C关键字 2.命名空间 作用域方面的优化 a.命名空间定义 b.命名空间使用 3.C 输入&输出 1.C关键字 C有63个关键字&#xff0c;C语言有32个关键字&#xff0c;存在重叠如荧光笔标出 2.命名空间 作用域方面的优化 如果变量&#xff0c;函数和类的名称都存在于全…

AI自动生成PPT文档 aippt的API介绍文档

官方链接直达&#xff01; 产品介绍​ 能力介绍​ AiPPT 是一款智能生成演示幻灯片的在线工具。专业设计团队打造海量模板资源&#xff0c;输入标题即可轻松生成完整的PPT。同时 AiPPT 支持导入多格式文档一键生成 PPT&#xff0c;让 PPT 创作更加高效。聚焦于内容&#xff0…

安装zabbix server

目录 1、实验环境 2、yum 安装zabbix server 2.1 解决权限问题和放行流量 2.2 安装zabbix-server 1、实验环境 操作系统rhel8zabbix6.0TLS数据库mysql8.0.30IP地址192.168.81.131时间配置NTP时间服务器同步 2、yum 安装zabbix server 如果通过yum源安装&#xff0c;操作系…

SysetmUI开机是否显示Keyguard的流程

KeyguardViewMediator的onSystemReady方法 没有启用keyguard时KeyguardViewMediator的log&#xff1a; onSystemReady 方法 doKeyguardLocked LockPatternUtils.isLockScreenDisabled 来判断是否启用 public final static String DISABLE_LOCKSCREEN_KEY "lockscreen.…

信息化工作人员必备常识4——ping命令详解【不间断发包自定义发包的大小自定义发包次数】

信息化工作人员必备常识4——ping命令详解【不间断发包&自定义发包的大小&自定义发包次数】 前言回顾pingtelnetnslookup命令 ping 命令详解帮助手册不间断向目标 IP 发送数据包 -t定义发送数据包的大小 -l-t&-l 验证网络承载能力自定义发送数据包的次数统计响应时…