在使用npm(Node Package Manager)时,有一些常用命令是每个开发者都应该熟悉的,这些建立了在Node.js和前端项目中管理依赖项的基础。下面是一些常用的npm命令:

  1. 初始化一个新项目
    npm init: 交互式创建一个package.json文件。
    npm init -y: 快速创建一个package.json文件,跳过询问步骤,使用默认值。
  2. 安装依赖
    npm install : 安装一个包,并将其添加到package.json文件的dependencies中。
    npm install --save-dev: 安装一个包,并将其添加到package.json文件的devDependencies中。
    npm install: 根据当前目录下的package.json文件安装所有依赖。
  3. 卸载依赖
    npm uninstall : 从项目中移除一个包,并更新package.json和package-lock.json文件。
  4. 更新依赖
    npm update: 更新所有模块到package.json中指定的最新版本。
    npm update : 更新指定的包到最新版本。
  5. 查看安装的包
    npm list: 查看当前项目安装的所有npm包。
    npm list --global: 查看全局安装的所有npm包。
    npm list : 查看特定包的版本和依赖信息。
  6. 运行脚本
    npm run : 运行package.json中scripts对象下的指定脚本。
  7. 发布和管理包
    npm login: 登录到npm账户。
    npm publish: 发布一个包到npm仓库。
    npm version : 更新你的包的版本号(update_type可以是major、minor或patch)。
    npm deprecate @ "": 弃用一个特定版本的包,并提供一个理由。
  8. 管理缓存
    npm cache clean --force: 清除npm缓存。在某些情况下有助于解决与缓存相关的问题。
  9. 查看包信息
    npm view : 查看一个包的详细信息,比如版本号、依赖关系等。

在CloudWatch控制台中,选择“Alarms”。
点击“Create alarm”按钮。
在“Select metric”中,选择“EC2” -> “Per-Instance Metrics” -> 选择你的实例 -> 选择“StatusCheckFailed”。
点击“Select metric”。
配置警报条件:
统计数据(Statistic):选择最小值(Minimum)。
周期(Period):选择5分钟。
条件(Conditions):大于(>)
阈值(Threshold):0
点击“Next”。
在“Configure actions”中,选择“Create new topic”或选择一个已有的SNS topic。
配置通知的接收邮箱。
点击“Next”并完成配置。

Response.blob()方法和Blob()构造函数都可以用来创建Blob对象,但它们的使用场景和目的有所不同。

Response.blob()

Response.blob()是Fetch API的一部分,它是在处理Fetch请求的响应时使用的。当您向一个服务器发送请求并接收到响应时,如果响应数据是二进制数据,您可以使用Response.blob()来获取这些数据的Blob对象。
例如,如果您请求一个图片或视频文件,服务器的响应可以通过Response.blob()转换为Blob对象。转换后的Blob对象可以用于多种用途,比如使用URL.createObjectURL()创建一个URL来显示这个图片或视频。
这个方法是异步的,返回一个Promise对象,这意味着您需要使用.then()方法或async/await语法来处理结果。

fetch('image.png')
  .then(response => response.blob())
  .then(blob => {
    // 使用获取到的blob对象
    const imageUrl = URL.createObjectURL(blob);
    document.querySelector('img').src = imageUrl;
  });

Blob()构造函数

Blob()构造函数用于直接在JavaScript中创建一个新的Blob对象。您可以提供一个数组作为第一个参数,数组中的每个元素都会成为Blob对象的一部分。这些元素可以是字符串、ArrayBuffer或者另一个Blob对象等。第二个参数是一个可选的对象,指定了Blob对象的属性,比如type属性来指定MIME类型。
这个构造函数主要用于在程序中动态创建二进制数据。您可以使用它来创建文件、处理文本或生成媒体内容等。

const blobParts = ['<q id="a"><span id="b">hey!</span></q>']; // 一个包含单个字符串的数组
const blob = new Blob(blobParts, { type: "text/html" }); // 得到blob
// 使用创建的blob对象
const url = URL.createObjectURL(blob);
document.querySelector('iframe').src = url;

Blob(Binary Large Object)对象表示了一个不可变的、原始数据的类文件对象。Blob对象可以表示存储在内存中的大量数据,比如图片、视频、音频或其他二进制格式的文件。通过JavaScript,我们可以用Blob来处理这些数据,实现多种功能,比如文件下载、上传、处理和转换等。

Blob的应用场景

1. 创建和下载文件

您可以使用Blob来动态创建文件内容,并允许用户下载这些文件。例如,您可以将一个文本数组转换成Blob对象,然后通过创建一个指向该Blob的URL,并将其设置为标签的href属性,实现文件的下载功能。

2. 上传文件

在前端,Blob可以用于上传文件。Blob对象可以通过AJAX或Fetch API上传到服务器。这对于上传图片或视频文件等大型文件特别有用,因为Blob可以将文件作为二进制数据传输,提高效率。

3. 从Blob对象创建URL

可以使用URL.createObjectURL()方法从Blob对象创建一个URL。这个URL可以用于在网页上显示Blob数据,例如显示图片或视频。

const blob = new Blob([document.querySelector('textarea').value], { type: 'text/plain' });
const url = URL.createObjectURL(blob);
document.querySelector('img').src = url;

4. 处理媒体文件

Blob非常适合于处理媒体文件,比如图片,MP4视频等。例如,您可以读取用户选择的图片文件,并使用Blob来预览图片;或者,您可以通过JavaScript处理视频文件,比如截取视频的一部分或更改视频的编码格式。

5. 缓存数据

Blob也可以用于前端的数据缓存。对于从服务器获取的大型数据(如JSON数据、图片或视频文件),您可以将其存储为Blob,然后在本地缓存。当需要这些数据时,可以直接从Blob读取,避免重复从服务器加载数据,提高应用性能。

问题在script标签的type="module" 上.... 不加这个type就正常了

==>
当在<script>标签中使用type="module"时,您告诉浏览器该脚本应当作JavaScript模块来处理。这意味着:
默认严格模式:模块自动处于严格模式下,您不需要在脚本顶部显式声明"use strict";。
模块作用域:在模块脚本中声明的变量、函数等不会自动成为全局作用域的一部分。它们只存在于模块作用域内,除非您显式地导出或导入它们。
支持模块导入和导出:您可以使用import和export语句在模块之间共享代码。

在使用Parcel这类构建工具时,它负责处理模块的打包和依赖管理。如果您的项目被构建为一个单一的打包文件,而您在引入这个文件时使用了type="module",那么可能会发生一些不一致的行为,因为Parcel已经将模块和其他代码转换成了浏览器可以直接执行的格式。具体表现取决于Parcel的版本和配置,以及您的项目结构。
如果不使用type="module"属性,脚本会被当作传统的JavaScript脚本来处理,这可能和Parcel构建的输出更加兼容,特别是如果Parcel已经处理了所有必要的模块转换。
如何决定是否使用type="module"?
如果您直接在HTML中编写或引入ES模块(也就是说,不通过构建工具处理),那么使用type="module"是正确和必要的。
如果您通过构建工具(如Parcel、Webpack等)构建项目,并且构建输出是一个自包含的脚本,那么通常不需要在引用构建后的脚本时使用type="module",除非您有特定的理由或构建工具的文档特别建议这样做。

使用 curl 查询 IP 信息

curl http://ip-api.com/json/

使用 geoiplookup 工具

安装 geoiplookup

查询 VPS 的位置

geoiplookup $(curl -s ifconfig.me)

使用 whois 命令
whois 命令可以查询 IP 地址的注册信息,这通常包含地理位置。
安装 whois

sudo yum install whois

查询VPS的位置

whois $(curl -s ifconfig.me)

检查本地 DNS 配置
确认本地的 DNS 配置没有影响到结果。可以尝试使用不同的 DNS 服务器来验证地理位置。您可以使用 Google 的公共 DNS 服务器 8.8.8.8 和 8.8.4.4,或者 Cloudflare 的公共 DNS 服务器 1.1.1.1 和 1.0.0.1。

配置本地 DNS
编辑 /etc/resolv.conf 文件:

sudo vim /etc/resolv.conf

将内容修改为:

nameserver 8.8.8.8
nameserver 8.8.4.4

SSH动态端口转发(也称为SSH隧道或SOCKS代理)是一个非常强大的功能
它能够通过SSH连接将本地计算机连接到另一个网络上的服务器,并将该服务器用作网络请求的代理。这个功能不仅可以用于安全地浏览互联网。

安全浏览

绕过网络限制: 如果你处于一个限制了访问特定网站的网络中,通过SSH动态端口转发可以安全地访问这些网站。
匿名浏览: 使用SSH隧道可以提高你浏览网站时的隐私性,因为你的网络流量会通过远程服务器转发。

开发与测试

访问受限的开发环境: 如果你需要访问部署在受限网络环境中的开发服务器,可以使用SSH隧道安全地访问这些资源。
数据库管理: 通过SSH隧道连接到远程数据库服务器,可以在本地运行数据库管理工具进行操作,而不需要直接暴露数据库端口。

远程工作

安全访问内部工具: 对于远程工作人员,通过SSH隧道可以安全地访问公司内网中的内部工具和服务。
文件传输: 虽然SCP和SFTP是更常用的SSH文件传输方法,但通过SSH隧道,你也可以安全地使用基于HTTP的文件管理界面。

游戏与娱乐

游戏:在某些情况下,使用SSH隧道可以减少游戏延迟或访问地区限制内容。

命令与配置

一个基本的SSH动态端口转发命令如下所示:

ssh -D 8080 -C -q -N 用户名@远程服务器地址
  • D 8080 指定了本地端口(在这个例子中是8080),SSH客户端会监听这个端口,并将通过SSH连接转发的流量作为SOCKS代理服务。
  • C 启用压缩,可以提高传输速度并减少数据使用。
  • q 启用静默模式,减少日志输出。
  • N 表示不执行远程命令,只进行端口转发。

使用 Parcel 插件处理静态文件

npm install parcel-plugin-static-files-copy --save-dev

在项目根目录创建一个 static 文件夹,并将 flowers.jpg 文件放入其中。

创建或更新 package.json 文件:

{
  "scripts": {
    "start": "parcel basic-fetch.html"
  },
  "staticFiles": {
    "staticPath": "static",
    "staticOutPath": "./"
  }
}

将 flowers.jpg 文件移动到 static 文件夹中:
...
运行项目