暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

一行代码搞定短链接

浮之静 2020-11-27
289

short-link源码[1]

背景知识

meta标签[2]

  • 元数据(metadata)是关于数据的信息。
  • 提供了 HTML 文档的元数据。元数据不会显示在客户端,但是会被浏览器解析。
  • 通常用于指定网页的描述,关键词,文件的最后修改时间,作者及其他元数据。
  • 元数据可以被使用浏览器(如何显示内容或重新加载页面),搜索引擎(关键词),或其他 Web 服务调用。

用法

  • 定义文档关键词,用于搜索引擎
<meta name="keywords" content="HTML, CSS, JavaScript">

  • 定义web页面描述
<meta name="description" content="This is a description">

  • 定义页面作者
<meta name="author" content="lencx">

  • 定义编译指令,10秒刷新页面
<meta http-equiv="refresh" content="10">

  • 定义编译指令重定向URL(设置0秒,立即重定向)
<meta http-equiv="refresh" content="0; url='https://s.nofwl.com'" />

Eleventy[3]

Eleventy是一个更简单的静态网站生成器。是Jekyll的JavaScript替代品。默认情况下为零配置,但具有灵活的配置选项。Eleventy使用你项目的现有目录结构,使用独立的模板引擎。可使用多种模板语言。支持HTML *.html
, Markdown *.md
,  JavaScript *.11ty.js
,  Liquid *.liquid
, Nunjucks *.njk
, Handlebars *.hbs
, Mustache *.mustache
, EJS *.ejs
, Haml *.haml
, Pug *.pug
等。总之功能强大,好处多多。自行查看文档,Eleventy的使用及模版语法不在本文范围。

实现

既然meta
标签可以重定向URL,那我如果自己配置一份映射表,不就可以想跳哪里就跳哪里吗😍?带着这样的想法,开始我们的短链接之旅。

# 想象中项目结构应该是这样的
[short-link] # 根路径
|- [dist] # 构建目录
|- [node_modules]
|- [public] # 公共资源
|- [src] # 源代码
|    |- index.njk # 模板页面
|    |- links.json # 配置链接映射关系
|     `- ... # 其他
|- .eleventy.js # eleventy配置文件
|- package.json
`- ... # 其他

Step1: 初始化

  • 初始化项目
# 初始化
npm init

# 安装依赖
npm i -D @11ty/eleventy

  • 编辑package.json,添加scripts字段
{
  "scripts": {
    "dev""eleventy --serve",
    "build""eleventy"
  }
}

  • 添加.eleventy.js
    文件,具体配置可参考Eleventy文档

Step2: 核心代码

编写模板及短链接映射文件,更多信息可查看Eleventy文档

  • 创建模板文件src/index.njk
    : 核心其实就是meta
    标签中的url
    从数据文件中读取数据,设置重定向的URL
---
pagination:
data: links
size: 1
alias: link
permalink: "{{ link }}/"
---
<!DOCTYPE html>
<meta http-equiv="refresh" content="0; url='{{ links[link] }}'">

  • 创建数据文件src/links.json
{
  "/-""/",
  "/""https://github.com/lencx/short-link",
  "t""https://translate.google.cn",
  "m""https://mtc.nofwl.com"
}

Step3: 部署

首先将要部署代码上传至github,或者直接fork我的项目,修改src/links.json
文件即可。然后去Vercel[4]官网导入github仓库。

Vercel部署步骤:Vercel Dashboard
-> import Project
-> Import Git Repository
-> URL of a Git repository
-> Deploy

⚠️ Vercel注意事项:

  • URL of a Git repository
    是输入自己的github仓库地址。
  • Deploy
    中的FRAMEWORK PRESET
    选择Eleventy,Build and Output Settings
    中的BUILD COMMAND
    默认就是npm run build
    不需要更改,但是OUTPUT DIRECTORY
    则需要改成dist
    ,然后点击部署按钮。具体部署可查看文档,没什么难度,部署遇到问题的可在公众号留言或在https://github.com/lencx/short-link/issues
    提问。

Step4: 绑定域名

打开Vercel的Dashboard
可以看到部署的项目卡片,点击卡片,可以看到Overview
Deployments
Analytics
Settings
的菜单,点击Settings -> Domains
可以绑定自己的域名,输入域名后,可能会有配置无效的错误,自己需要在域名下添加一条DNS解析记录。

总结

其实整个短链接生成的核心代码就一个meta
标签。剩下的无非就是一些配置,实现及部署。如果感觉这个项目还不错,可以fork或star,你的支持,也是我创作的动力😊


参考资料

[1]

short-link源码: https://github.com/lencx/short-link

[2]

meta标签: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta

[3]

Eleventy: https://www.11ty.dev

[4]

Vercel: https://vercel.com


「 ☟ 阅读原文 查看源码 」

文章转载自浮之静,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论