package.json type module下引入模块 throw new ERR_MODULE_NOT_FOUND 报错问题解决
前言
- 目前js常用的两种模块系统分别是:CommonJs以及ES Module(推荐使用)
- 在 CommonJS 模块系统中,模块的导出和引用使用 module.exports 和 require,这是 Node.js 的默认模块系统(如果 package.json 没有指定 “type”: “module”)
- 在ES Module中则使用我们目前常用到的export,import语法
问题描述
- 如果明确指定了package.json中**type=”module”**的话,引用文件在导入时需要添加后缀,示例如下:
// index.js |
- 如果是在TypeScript项目中引用,开发阶段不编译的情况下也是可以直接引入js后缀文件,示例如下:
// index.ts |
原因
ES标准要求,在 Node.js 中,当你设置了 "type": "module"
,要求开发者明确指定文件的路径和扩展名,这是为了遵循 ES 模块标准,与浏览器行为保持一致,并减少模块解析的歧义,与 CommonJS 的模块解析机制不同,Node.js 不会自动推断文件的扩展名
bun局部设置国内镜像源
前端项目根目录下添加==bunconfig.toml==
新增如下配置:
[install] |
restful api 接口设计指南
概述
- 前后端通信,可采用restful风格的api,除了restful api还有另一种风格的api Graphql
- 本质上其实就是编写http请求的一种规范
常见的http方法
- GET:获取资源(请求参数一般附加在url后面)
- POST:创建新资源(请求参数一般放在请求体body中)
- PUT:更新现有资源(请求参数一般也是放在body中)
- DELETE:删除资源(删除一般是删除指定id,id放在url后面)
URL设计
url应该表示资源,而不是动作,应该使用http方法表示动作
例子:
GET /users (正确)GET /getUsers(不推荐)
POST /users (正确)POST /createUser(不推荐)
使用复数形式表示资源集合
例子:
- GET /users (正确)GET /user(不推荐)
请求和响应设计
- http状态码
分类 | 描述 |
---|---|
1** | 信息性状态码,一般不常用 |
2** | 成功状态码 |
3** | 重定向状态码,一般不常用 |
4** | 客户端错误状态码,多半是前端参数错误 |
5** | 服务端错误状态码,多半是后端接口错误 |
- 常用的状态码(避免滥用200状态码来表示所有情况)
状态码 | 描述 |
---|---|
200(OK) | 请求成功时使用 |
400(Bad Request) | 客户度(一般是前端)语法错误,后端服务不能理解 |
401(Unauthorized) | 没有授权,需要进行身份认证 |
403(Forbidden) | 访问被禁止,原因很多 |
404(Not Found) | 请求资源找不到 |
500(Internal Server Error) | 服务端内部错误 |
502(Bad Gateway) | 网关错误或者代理服务器错误,一般是挂掉了 |
504(Gateway Time-out) | 网关超时,没有及时响应 |
- 请求响应传输格式:使用JSON
- 响应实体设计(golang为例)
// Response 常规响应实体封装 |
ubuntu中容器化mysql安装使用
Dockerfile编写
- 随便新建一个文件夹(比如是:mysql文件夹),使用
vim Dockerfile
并添加下面的内容
# 使用官方MySQL 8.0镜像作为基础镜像 |
- 在mysql文件夹下,使用
vim init.sql
并添加下面的内容
-- 创建数据库(如果需要) |
镜像构建&运行
在新建的mysql目录下执行下面的命令
sudo docker build -t my-mysql:8.0 . |
运行该镜像
sudo docker run --name mysql-container -d -p 3306:3306 my-mysql:8.0 |
验证安装
sudo docker exec -it mysql-container mysql -u root -p |
数据库连接
比如Navicat
远程连接该数据库,博主此处mysql是装在云服务器上的,所以可以使用ip端口号密码就可以连接;需要注意的是,服务器上一般不会默认开发3306
端口,所以使用Navicat
测试连接会失败,所以需要去对应的服务器控制台,开放对应的端口规则,访问才能生效
ubuntu中非容器化mysql安装
安装(mysql8.0)
升级源并安装mysql8.0
sudo apt update |
安装后,mysql服务会自己启动,验证方式如下
sudo systemctl status mysql |
运行安全安装脚本
MySQL 安装文件附带了一个名为mysql_secure_installation
的脚本,它允许你很容易地提高数据库服务器的安全性。
sudo mysql_secure_installation |
你将会被要求配置VALIDATE PASSWORD PLUGIN
,它被用来测试 MySQL 用户密码的强度,并且提高安全性:
There are three levels of password validation policy: |
如果你设置了验证密码插件,这个脚本将会显示你的新密码强度。输入y
确认密码:
Estimated strength of the password: 50 |
下一步,你将被要求移除任何匿名用户,限制 root 用户访问本地机器,移除测试数据库并且重新加载权限表。你应该对所有的问题回答y
。
登录mysql
密码是运行安全安装脚本时设置的密码
sudo mysql -u root -p |
使用yalc作为你的本地依赖管理工具
hexo 插件开发流程以及推送至hexo官方列表
Hexo插件分类
插件类别 | 插件作用 |
---|---|
渲染插件 | 界面渲染逻辑处理,例如:hexo-renderer-ejs 、hexo-renderer-pug |
部署插件 | 静态文件发布 |
分析插件 | 数据分析:例如文章字数、阅读时间等 |
SEO插件 | 搜素引擎优化插件 |
生成器插件 | 生成特定的页面或者文件:例如标签页面、分类页面等 |
过滤器插件 | 过滤器插件在 Hexo 的生命周期的各个阶段对内容进行处理。例如,添加代码高亮、处理图片等。 |
显示插件 | 显示插件提供辅助功能,通常用于模板或布局中,例如生成导航菜单、分页等。 |
模版插件 | 模板插件提供主题和样式相关的功能,帮助美化博客的外观。 |
扩展插件 | 扩展插件增加或修改 Hexo 的核心功能,提供额外的特性和功能。 |
数据插件 | 数据插件用于处理外部数据源,例如从数据库或 API 获取数据,并在博客中展示。 |
Hexo插件使用
安装插件
npm i hexo-create-issues |
配置插件
# _config.yml 文件 |
Hexo插件开发
Tips 1: 建议使用commonjs方式编写,新的一些package大都是esmodule编写,commonjs中引入需要动态导入import()
Tips 2: Hexo 插件需要以
hexo-
前缀开头,同时不能重名
脚本模式开发
- hexo工程目录下新建scripts文件夹
- 根据需求编写对应脚本
npm包形式开发
新建项目,按照npm包开发流程即可
项目依赖安装,其他需要的依赖自行安装,hexo是必须的
npm install hexo
根据需求编写脚本
hexo.on()
可以监听hexo执行的生命周期钩子,可以编写相关逻辑hexo.config
可以获取_config.yml
中的所有配置项,逻辑中可以调用获取
本地联调:建议使用
yalc
,具体使用方式可以参考博主的这篇文章,yalc使用调试完成,发布至npm
npm login
npm publish项目中使用:安装发布的npm包后,_config.yml中再配置一下即可(
plugins
以及所需变量
配置)
Hexo插件发布至hexo列表
需要先发布npm包
然后fork hexojs/site
clone fork后的仓库到本地
在clone后的项目中的
source/_data/plugins/
中创建一个新的 yaml 文件,使用您的插件名称作为文件名编辑yaml文件,按需求录入以下内容
description: Server module for Hexo.
link: https://github.com/hexojs/hexo-server
tags:
- official
- server
- consolepush修改,再向hexo site官方提交一个pull request,请注意提交的commit msg格式规范
go gin框架接入swagger,next项目自动生成接口文档
准备工作
- 安装swagger cli(用与格式化注释以及生成swagger json文件)
go get -u github.com/swaggo/swag/cmd/swag |
- mac中安装后需要将swag移动到下面的路径下,确保shell中swag命令全局可用:
sudo mv $GOPATH/bin/swag /usr/local/go/bin |
- 检测是否成功安装
swag -v |
- 其他扩展文件安装
go get -u -v github.com/swaggo/gin-swagger # 集成 Swagger 文档到 Go 的 Gin 框架中的库 |
使用流程
注释
注解 | 说明 |
---|---|
@Summary | 摘要 |
@Produce | 生成的文档的MIME类型,json、xml等 |
@Param | 参数,左=>右分别为:参数名 、入参类型 、数据类型 、是否必填 、注释 |
@Success | 响应成功,从左到右分别为:状态码、参数类型、数据类型、注释 |
@Failure | 响应失败,从左到右分别为:状态码、参数类型、数据类型、注释 |
@Router | 路由,从左到右分别为:路由地址,HTTP 方法 |
代码示例
Tips: 需要注意的是,注释中引用其他类型,比如model.Tool ,需要在Tool上添加注释,swag init才会自动做类型的关联,不然swag识别不了该写法
// Tool represents a tool entity |
// @Summary 我的工具信息列表获取 |
格式化
swag fmt # 会扫描该项目所有包含注释的方法,对注释进行格式化 |
文档生成
swag init 扫描文件,一般都需要包含main.go,不然会报错,笔者项目main.go不在根目录下,所以需要手动指定swag扫描的文件,这里我们指定了,./cmd/my_website_backend
该文件包含main.go,./internal/app/controller
该文件中包含添加注释的控制器函数,./internal/app/model
该文件包含数据模型映射的类型,注释中有时候需要引用该类型;最后-o ./api/swagger
指定生成的文档存储在./api/swagger
文件夹中
swag init --dir ./cmd/my_website_backend,./internal/app/controller,./internal/app/model -o ./api/swagger |
文档路由添加
生成的文档需要有专门的路由进行展示,需要我们配置:
package router |
前端接口文档自动生成
- 前后端对接接口,前端手动去添加typescript类型的话,费时费力
- 行业有这样一种解决方案,利用openApi规范,后端按规范写好json注释,我们利用提供的
openapi-generator
cli工具生成支持的任意类型的接口,避免重复声明类型 - 官方有现成的解决方案,行业内也有许多,咱们这里选用国内阿里开源的库@umijs/openapi去生成接口文档,更好的其他方式,可以自己去探索
安装
pnpm add -D @umijs/openapi |
使用
- 博主这里是放在根目录下的script/genOpenApi.js文件中的
import { generateService } from "@umijs/openapi"; |
- package.json scripts中添加生成的脚本命令,按自己需求更改
"openApi": "node script/genOpenApi.js" |