node.js学习P3-P10

news2024/9/19 17:00:21

P3 npm package.json(package解读+npm工具+换镜像源)

一个package.json文件可以的作用

  • 作为一个描述文件,描述了你的项目依赖哪些包 ,用来干什么的
  • 允许我们使用“语义版本规则”,指明你项目依赖的版本
  • 让你的构建更好的与其他人共享

version三段式(1.0.0)

1-主版本重大更新
0-次版本号,功能的更新,编译宏
0-修订号,修个bug

npm init 创建一个package,json输入,初始化一个新的npm项目
在这里插入图片描述

main是入口文件,用包时main会去找入口
这四个和模块化有关系

scripts可以执行命令(用npm run 里面的参数)
repository资料显示到官网

npm install 包(简写npm i 包)安装一个或一组想要的包,并在当前目录存放一个node-modules

npm安装详细版本在后面加一个@(npm install vue@2.2.6)

dependences生产环境需要的依赖,显示你下载的版本

  1. npm install vue --save老版本5.4之前放入dependences(现在高版本自动加)

  2. npm install vue --save-dev或者简写npm install vue-D
    增加devDependences(开发的依赖)

  3. 还有一个peerDependences,不能凭空运行

npm -s和-d区别

"dependencies"表示开发和上线都需要的第三方包,用-S
"devdependencies"表示仅在开发阶段需要的第三方包,用-D
npm config list 查错很好用用于列出所有的 npm 配置信息。执行该命令可以查看当前系统和用户级别的所有 npm 配置信息,以及当前项目的配置信息(如果在项目目录下执行该命令)

npm get registry 用于获取当前 npm 配置中的 registry 配置项的值。registry 配置项用于指定 npm 包的下载地址,如果未指定,则默认使用 npm 官方的包注册表地址

npm set registrynpm config set registry 命令,将 registry 配置项的值修改为指定的 地址
在这里插入图片描述
npm i xmzs -g方便切换源写的工具包(好方便啊)
在这里插入图片描述

我不是很懂,先记着吧
原文地址http://t.csdnimg.cn/ExHnr
(nodejs第三章)

P4 npm install(install原理:找npmrc+索引记录)

有复用模块的是非理想状态

在这里插入图片描述
config找好多层npmrc

package-lock.json 的作用

这个可以锁定版本记录依赖树详细信息

  • version 该参数指定了当前包的版本号

  • resolved 该参数指定了当前包的下载地址

  • integrity 用于验证包的完整性

  • dev 该参数指定了当前包是一个开发依赖包

  • bin 该参数指定了当前包中可执行文件的路径和名称

  • engines 该参数指定了当前包所依赖的Node.js版本范围

    这个通过 name + version + integrity 信息生成一个唯一的key,
    这个key能找到对应的index-v5 下的缓存记录 也就是npm cache 文件夹下的

原文http://t.csdnimg.cn/taQnX
(nodejs第四章)

P4 npm run原理(查找vite+npm生命周期)

在这里插入图片描述
查找规则是:

  • 先从当前项目的node_modules/.bin去查找可执行命令vite
  • 如果没找到就去全局的node_modules 去找可执行命令vite(全局环境配置)
  • 如果还没找到就去环境变量查找
  • 再找不到就进行报错

产生三个vite命令兼容各个平台

在app下面新建一个index.js的文件并保存–> cmd /app: node index.js

npm 生命周期

在这里插入图片描述
执行 npm run dev 命令的时候
predev 会自动执行 他的生命周期是在dev之前执行,
然后执行dev命令,
再然后执行postdev,
也就是dev之后执行

原文http://t.csdnimg.cn/VmXhB
(nodejs第五章)

P6 npx(查找全局安装+)

npx 是命令行工具,允许用户在不安装全局包的情况下,运行已安装在本地项目中的包或者远程仓库中的包。

npm ls -g查找全局安装了哪些可执行文件,不加-g就是当前项目

npx

  1. 避免全局安装:npx允许你执行npm package,而不需要你先全局安装它。
  2. 总是使用最新版本:如果你没有在本地安装相应的npm package,npx会从npm的package仓库中下载并使用最新版
  3. 执行任意npm包:npx不仅可以执行在package.json的scripts部分定义的命令,还可以执行任何npm package。
  4. 执行GitHub gist:npx甚至可以执行GitHub gist或者其他公开的JavaScript文件。

原文http://t.csdnimg.cn/nrJCn
(nodejs第六章)

P7 如何发布npm包(登录官网+发布)

  1. 准备npm adduser
    去npm账号注册或者点跳出的网址

要用npm官方的源,如果不是就mmp use切换一下
更改配置package.json内容
发包name不能一样的

  1. 发布npm publish

原文http://t.csdnimg.cn/H4zsF
(nodejs第七章)

P8 搭建npm私服!?

防止别人把包删了你用不了,放私服可以不同步删除而是保留版本

好处

  • 离线使用,你可以将npm私服部署到内网集群,这样离线也可以访问私有的包。
  • 提高包的安全性,使用私有的npm仓库可以更好的管理你的包,避免在使用公共的npm包的时候出现漏洞。
  • 提高包的下载速度,使用私有 npm 仓库,你可以将经常使用的 npm 包缓存到本地,从而显著提高包的下载速度

https://verdaccio.org/zh-CN/

安装npm install verdaccio -g在cmd上(?)
直接运行verdaccio就行

在这里插入图片描述
第二个可以自定义端口号5000改
第三个指定配文件

更改端口号后打开网址
在这里插入图片描述
把上面的输入vscode终端
npm adduser --registry http://localhost:9999/创建或
npm login --registry http://localhost:9999/登陆或
npm publish --registry http://localhost:9999/发布

密码打不上创建不来账号,很牛逼,我不会搞,先放着吧,反正也不发包

原文http://t.csdnimg.cn/sBQlV
(nodejs第八章)

P9 引入导出模块化!(CommonJS/esm+解构+起别名+源码解析)

Nodejs 模块化规范遵循两套一 套CommonJS规范另一套esm规范

CommonJS规范

通过npm init -y生成package.json
在这里插入图片描述
有type把type指定为commonjs

commonjs的引入是require

require引入(5种方法)
  1. 引入自己编写的模块 ./ …/ 等
    require(‘./test.js’)

  2. 支持引入第三方模块express md5 koa 等
    require('md5’)
    // md5是加密,正常情况下,它的结果是一个 长度为 32位 的 16进制 的 字符串。

    在app下面新建一个index.js的文件并保存 node index.js

  3. 支持引入nodejs自带内置模块例如 http os fs child_process 等nodejs内置模块

    const fs = require(‘node:fs’);
    // 导入核心模块,高版本需要写’node:fs’(但没有强制要求,方便区分),低版本直接fs

  4. 支持引入addon C++扩展模块 .node文件

  5. 支持引入json文件

导出模块exports 和 module.exports
module.exports = {
  hello: function() {
    console.log('Hello, world!');
  }
};

//const { name, age } = node;(es6的结构赋值)

如果不想导出对象直接导出值

module.exports = 123

ES module规范

把type改成module

esm的引入是import

import fs from 'node:fs'

如果要引入json文件需要特殊处理 需要增加断言并且指定类型json node低版本不支持

import data from './data.json' assert { type: "json" };
console.log(data);

加载模块的整体对象(预览模式)

import * as all from 'xxx.js'

在这里插入图片描述
重名的时候可以起别名
在这里插入图片描述
esm不支持引入json文件
虽然可以强行支持(node18版本以上)
在这里插入图片描述

Cjs 和 ESM 的区别(面试题)

  1. Cjs是基于运行时的同步加载(放里面),esm是基于编译时的异步加载(import一般只能放最上面)
    //import非要参杂在逻辑里面使用import函数模式
    在这里插入图片描述

  2. Cjs是可以修改值的,esm值并且不可修改(可读的)

  3. Cjs不可以tree shaking,esm支持tree shaking

  4. commonjs中顶层的this指向这个模块本身,而ES6中顶层this指向undefined

    源码解析懒得看了嘻嘻
    原文链接http://t.csdnimg.cn/vyQds
    (nodejs第九章)

P10 全局变量(global全局+api绝对路径)

global+globalThis

  1. node中没有window DOM和BOM
    在nodejs中使用global定义全局变量,定义的变量,可以在引入的文件中也可以访问到该变量
    (要注意先后顺序)

  2. globalThis全局变量,
    在nodejs环境会自动切换成global ,
    浏览器环境自动切换window非常方便

ECMAscriptAPI

ECMAscriptAPI里的api基本都可以用

nodejs内置全局api

  1. __dirname
    当前模块的所在目录的绝对路径
  2. __filename
    当前模块文件的绝对路径,包括文件名和文件扩展名
  3. process(处理进程)
  • process.argv: 这是一个包含命令行参数的数组。第一个元素是Node.js的执行路径,第二个元素是当前执行的JavaScript文件的路径,之后的元素是传递给脚本的命令行参数。

  • process.env: 这是一个包含当前环境变量的对象。您可以通过process.env访问并操作环境变量。

  • process.cwd(): 这个方法返回当前工作目录的路径。

  • process.on(event, listener): 用于注册事件监听器。您可以使用process.on监听诸如exit、uncaughtException等事件,并在事件发生时执行相应的回调函数。
    在这里插入图片描述

  • process.exit([code]): 用于退出当前的Node.js进程。您可以提供一个可选的退出码作为参数。

  • 在这里插入图片描述

  • process.pid: 这个属性返回当前进程的PID(进程ID)。

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

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

相关文章

cin-getline缓存区

更多资源请关注纽扣编程微信公众号 cin.sync()清除缓存区 如果需要输入如下内容 3 This is C language. This is JAVA language. This is Python language. 写如下程序 #include<bits/stdc.h> using namespace std; string str[100]; int main(){int n;cin>&…

【Pandas】配合Numpy做数据异常值处理

1.四分卫间距确定数据范围 numpy.quantile(a, q, axisNone, outNone, overwrite_inputFalse, methodlinear, keepdimsFalse, *, interpolationNone)[source]计算指定轴的n分位数 参数q给定指定的几分位数&#xff0c;范围[0,1] import numpy as np import pandas as pd def …

每日一题——Python实现PAT甲级1029 Median(举一反三+思想解读+逐步优化)

一个认为一切根源都是“自己不够强”的INTJ 个人主页&#xff1a;用哲学编程-CSDN博客专栏&#xff1a;每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 我的方法 代码功能和结构点评 时间复杂度分析 空间复杂度分析 优化建议 我要更强…

【Text2SQL 论文】IncSQL:通过增量式生成 action 序列来得到 SQL

论文&#xff1a;IncSQL: Training Incremental Text-to-SQL Parsers with Non-Deterministic Oracles ⭐⭐⭐ ICLR 2019&#xff0c;arXiv:1809.05054, Microsoft Research 一、论文速读 本文提出了 IncSQL&#xff0c;一个使用 Non-Deterministic Oracles 思路的增量式 Text…

从零开始打造教育APP:在线教育系统源码与开发流程

很多人疑问&#xff0c;应该如何从零开始打造一个在线教育APP&#xff1f;今天&#xff0c;小编将详细为大家讲解在线教育系统的源码与开发流程。 一、需求分析 对于在线教育APP&#xff0c;需要要明确以下几点&#xff1a; 1.目标用户&#xff1a;明确APP的用户群体&#xf…

字符串和字符串函数(1)

前言&#xff1a; 字符串在C语言中比较特别&#xff0c;没有单另的字符串类型&#xff0c;想要初始化字符串必须用字符变量的数组初始化&#xff0c;但是在C语言标准库函数中提供了大量能对字符串进行修改的函数&#xff0c;比如说可以实现字符串的的拷贝&#xff0c;字符串的追…

判断dom元素是否滚动到底、是否在可视区域

概览 我们日常开发中&#xff0c;在面对懒加载、虚拟列表需求时&#xff0c;经常需要判断dom元素是否滚动到底、是否在可视区域。但是由于涉及的属性太多了&#xff0c;比如scrollTop、clientHeight、scrollHeight、getBoundingClientRect()等属性&#xff0c;现根据这两个场景…

Docker环境安装并使用Elasticsearch

1、拉取es docker pull elasticsearch:7.10.12、查看镜像 docker images3、启动es docker run -d --name esearch -p 9200:9200 -p 9300:9300 elasticsearch:7.10.14、如果启动ES时出现一下问题 Unable to find image docker.elastic.co/elasticsearch/elasticsearch:7.10.…

基于springboot+vue的班级综合测评管理系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

台灯的功能作用有哪些?看完就知道台灯怎么选!

作为一位家长&#xff0c;我深刻意识到保护孩子眼部健康的重要性。随着科技的飞速发展&#xff0c;孩子们越来越多地使用电子设备&#xff0c;如平板电脑、手机和电视&#xff0c;长时间盯着屏幕成为了他们日常生活的一部分。然而&#xff0c;这些屏幕发出的蓝光和闪烁的光线&a…

C++的第一道门坎:类与对象(一)

1.面向过程与面向对象 1.1面向过程 我们之前学习的C语言就是一种面向过程的语言&#xff0c;面向过程的语言强调的是具体实现的过程&#xff0c;一般用函数来具体实现。我们用面向过程的思想&#xff0c;就可以把炒菜分为以下几个步骤: 1.2面向对象 而对于面向对象的语言而言…

duckdb 插件机制研究

本文研究 duckdb 内置的 extensions 工作机制。 插件架构 在 duckdb 源码内&#xff0c;内置了一组原生插件&#xff0c;位于顶层 extension 目录下&#xff1a; 除此之外&#xff0c;还支持 Out-of-Tree Extension&#xff0c;简单说就是独立的插件&#xff0c;不是集成在源…

零代码创建属于自己的情伤治愈者

前言 在这个社会物质文明生活发展迅速的年代&#xff0c;很多人都有心底里难以说出的痛楚&#xff0c;他们往往都与情伤相关&#xff0c;面对这样的情况&#xff0c;我们结合文心智能体设计出一款适合所有人的情伤治愈工具 体验智能体 文心智能体平台是一款基于自然语言处理和…

【鱼眼镜头10】等距Equidistant模型的Kannala-Brandt模型,opencv的鱼眼标定使用的模型。kalibr中的 pinhole + equidistant 都是指该模型。

Kannala Brandt 模型 / opencv中的fisheye / kalibr中的 pinhole equidistant 都是指该模型。 opencv https://docs.opencv.org/4.x/db/d58/group__calib3d__fisheye.html kalibr https://github.com/ethz-asl/kalibr/wiki/supported-models 在之前的博客【鱼眼镜头1】鱼眼…

linux centos磁盘清理相关

清理磁盘流程 1、查看磁盘挂载路径及使用率 df -h2、查看当前文件下文件大小 du -sh *3、制空文件内容 > 文件名 ###制空当前文件内容&#xff0c;直接清0 列子 >access.loglinux操作系统中&#xff0c;经常会遇到磁盘空间满的问题。遇到这样的问题&#xff0c;先查下…

实战 | 使用YoloV8实例分割识别猪的姿态(含数据集)

导 读 本文主要介绍如何使用YoloV8实例分割识别猪的姿态&#xff08;含数据集&#xff09;。 背景介绍 在本文中&#xff0c;我将介绍如何使用YoloV8在猪的自定义数据集上进行实例分割&#xff0c;以识别和跟踪它们的不同姿态。 数据集 使用的数据集来源于Kokkenborg Aps&…

【智能算法】青蒿素优化算法(AO)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献5.代码获取 1.背景 2024年&#xff0c;C Yuan受到青蒿素药物治疗疟疾过程启发&#xff0c;提出了青蒿素优化算法&#xff08;Artemisinin Optimization, AO&#xff09;。 2.算法原理 2.1算法思想 AO灵感来…

在C++中自定义命名空间,在命名空间中定义string变量,同时定义一个函数实现单词逆置

代码 #include <iostream> #include <cstring> using namespace std; namespace my_space {string s;void reverse(string s);//定义逆置函数 } using namespace my_space; void my_space::reverse(string s){int lens.size();int i0;int jlen-1;while(i<j){//…

MongoDB 和 AI 赋能行业应用:电信和媒体

欢迎阅读“MongoDB 和 AI 赋能行业应用”系列的第二篇。 本系列重点介绍 AI 应用于不同行业的关键用例&#xff0c;涵盖制造业和汽车行业、金融服务、零售、电信和媒体、保险以及医疗保健行业。 电信行业的经营环境以利润空间狭小为特点&#xff0c;尤其是在差异化极小的商品…

markdown画时序图的时候,如何自动显示每一条时序的序号

1: 现象描述 今天画时序图的时候&#xff0c;发现时序上面没有显示序号&#xff0c;看起来不够清晰&#xff0c;只有单纯的说明; 如下图所示 刚测试CSDN的时序图&#xff0c;默认是带序号的&#xff0c;看起来和实际使用的markdown工具有关系&#xff1b; 2&#xff1a;解决办…