1.0.1 • Published 2 years ago

memes-generator-json v1.0.1

Weekly downloads
-
License
MIT
Repository
github
Last release
2 years ago

Memes Json Generator

npm version

这是什么?

一个基于Nunjucks模板引擎的表情包Json文件生成器

生成的Json文件可用于Artalk、Twikoo等评论系统,增加发送表情包功能

另外,运行app.js后还会 自动生成 用于展示表情包的静态网站,相关文件在/static

我搭建的表情包展示网站

为什么?

为了减少重复工作

最近在个人博客中引入了Artalk评论系统,该系统支持自定义表情包,可以在发送评论时使用。

Artalk以特定的Json格式导入表情包,例如:

emoticons: [{
    "name": "颜表情",
    "type": "emoticon", // 字符类型
    "items": [
        { "key": "Hi", "val": "|´・ω・)ノ" },
        { "key": "开心", "val": "ヾ(≧∇≦*)ゝ" },
        //...
    ]
}, {
    "name": "滑稽",
    "type": "image", // 图片类型
    "items": [
        {
            "key": "原味稽",
            "val": "<图片 URL>"
        },
        //...
    ]
}],

为了减少工作量,我编写了这个简单的生成器,可以一键生成受支持的Json文件

如何使用?

第零步,克隆下来本仓库,执行npm i安装依赖

第一步,将需要引入的一组表情包放在imgs文件夹下。示例:imgs/huaji/*

第二步,在配置文件config.js中增加引入的表情包信息

name: 表情包的名字

path: 相对于imgs的路径,建议设为拼音或者英文缩写,例如:imgs/huaji

baseUrl: 表情包的url链接前缀,例如:https://meme-repo.pages.dev

第三步,执行node src/app.js,会在/memes/文件下生成Json文件

也可使用npm run gen命令

输出:

./memes
└── huaji
    ├── huaji_artalk.json
    ├── huaji_owo.json
    └── index.html

如果你希望生成用于展示表情包的静态网站,可以在配置文件config.js中开启: "isGenStatic": "true

执行node src/app.js后,会在static目录下生成网站文件

./static
├── 404.html
├── imgs
│   └── huaji
│       ├── huaji.gif
│       ├── huaji1.jpg
│       ├── huaji10.png
│       └── ...
├── index.html
└── memes
    └── huaji
        ├── huaji_artalk.json
        ├── huaji_owo.json
        └── index.html

然后直接将static文件夹部署到服务器,或者Netlify, Cloudflare Pages, Vercel, Weblify, Aliyun OSS等托管服务上即可

首页效果

具体表情包页面

项目结构

该项目结构比较简单,主要由一个模板目录、一个代码目录和一个配置文件组成

注意:本项目展示用的表情包来自于@2X-ercha/Twikoo-Magic

./src
├── app.js  // 主程序
└── utils
    └── index.js    // 工具类
./template
├── 404.html    // 404 页面
├── child_index.html // 具体表情包主页的模板
├── json
│   ├── artalk.json // Artalk格式的json文件模板
│   └── owo.json    // owo格式的json文件模板
└── root_index.html // 网站主页的模板
config.js   // 配置文件

配置文件

baseUrl中填写表情包存储的「根路径」

如果将/static文件夹上传到Cloudflare pages,域名为https://meme-repo.pages.dev,则

"baseUrl": "https://meme-repo.pages.dev"

而相应滑稽表情包的存储路径为 https://meme-repo.pages.dev/memes/huaji/xxx.png

module.exports = {
    "isGenStatic": true,
    "memes": [
        {
            path: 'huaji',
            // 表情包的根路径
            baseUrl: 'https://meme-repo.pages.dev', // 结尾不要带'/'
            // 表情包名称
            name: '滑稽'
        },
        ...    
    ]
}

进阶

自定义模板

本项目基于Nunjucks模板引擎开发,具体使用参照官方文档,简单易上手

Ps: Hexo的Next主题就是基于Nunjucks编写的

Artalk官方支持的格式举例:

{
    "name": "滑稽",
    "type": "image", // 图片类型
    "items": [
        {
            "key": "原味稽",
            "val": "<图片 URL>"
        },
        //...
    ]
}

njk模板长这样

{
    "name": "{{ memeName }}",
    "type": "image",
    "items": [
        {% set comma = joiner() %}  // joiner 参见文档 https://mozilla.github.io/nunjucks/templating.html#joiner-separator
        {% for item in imageUrlList %}  // 循环
        {{ comma() }}   // 引入
        {
            "key": "{{ item.split('.')[0] }}",
            "val": "{{ baseUrl }}/imgs/{{ memePath }}/{{ item }}"
        }
        {% endfor %}
    ]
}

njk模板有四个传入参数:

  • memeName:表情包名称
  • imageUrlList:该组表情包下的「图片名字列表」(带拓展名)
  • baseUrl:图片的url链接前缀
  • memePath:表情包存储的路径。例如,滑稽表情包为huaji

后话

这是我第一次使用javascript,不太熟练,若有指教,欢迎提issue或者发邮件讨论,感谢赐教!