- vừa được xem lúc

Viết script tạo bài viết mới trong Docusaurus Blog

0 0 9

Người đăng: Khôi Nguyễn Đức Anh

Theo Viblo Asia

Ở bài viết trước mình đã hướng dẫn các bạn tạo blog đơn giản vói Docusaurus. Tuy nhiên khi muốn tạo bài viết mới thì phải tạo file md đúng thư mục, rồi quy tắc đặt tên file cũng như phải viết phần mô tả ở đầu file khá rườm rà. Nên hôm nay mình sẽ hướng dẫn các bạn viết script để nó làm giúp chúng ta chuyện nhàm chán này.

Cài thư viện cần thiết

Trước tiên chúng ta tiến hành cài thêm package fs-extra để có thể đọc ghi file trong máy

npm i fs-extra

Viết script

Trong thư mục root của project các bạn, tiến hành tạo file script/createNewBlogPost.js với nội dung như sau:

const fs = require('fs-extra');
const readline = require('readline'); // Đường dẫn tới thư mục blog của Docusaurus
const blogPath = 'blog'; // Thay đổi đường dẫn tới thư mục blog của bạn const rl = readline.createInterface({ input: process.stdin, output: process.stdout,
}); let title, tags, slug; // Hàm để nhập thông tin từ người dùng
function promptForData() { rl.question('Nhập tiêu đề bài viết: ', (answer) => { title = answer || 'New Blog Post'; rl.question('Nhập các tags (phân cách bằng dấu phẩy): ', (answer) => { tags = answer || 'docusaurus, blog'; rl.close(); createNewBlogPost(); }); });
} // Hàm để tạo slug từ tiêu đề
function generateSlug(title) { const processedTitle = title .toLowerCase() .normalize('NFD') .replace(/đ/g, 'd') // Thay thế đ thành d .replace(/[\u0300-\u036f]/g, '') // Bỏ dấu tiếng Việt .replace(/[^\w\s]/gi, '') // Loại bỏ ký tự không phù hợp .replace(/\s+/g, '-') // Thay khoảng trắng bằng dấu gạch ngang const currentDate = new Date().toISOString().slice(0, 10); // Lấy ngày tháng theo định dạng YYYY-MM-DD return `${currentDate}-${processedTitle}`;
} // Hàm để tạo bài viết mới và thư mục chứa file
function createNewBlogPost() { slug = generateSlug(title); const directoryPath = `${blogPath}/${slug}`; fs.ensureDirSync(directoryPath); // Tạo thư mục nếu chưa tồn tại const now = new Date(); const offset = now.getTimezoneOffset(); // Lấy offset theo phút const offsetHours = offset / 60; // Chuyển offset thành giờ const nowWithOffset = new Date(now.getTime() - offset * 60 * 1000); // Áp dụng offset để lấy giờ theo timezone const formattedDate = nowWithOffset.toISOString().substring(0, 16); // Định dạng theo timezone const markdownContent = `---
title: ${title}
authors: [ ndanhkhoi ] # <-- Thay tên author của bạn vào đây
date: ${formattedDate}
tags: [${tags}]
slug: ${slug}
---
<!--truncate-->
`; fs.writeFileSync(`${directoryPath}/index.md`, markdownContent); console.log(`Created new blog post: ${slug}/index.md`);
} // Bắt đầu nhập thông tin từ người dùng khi chạy lệnh
promptForData(); 

Tiến hành thêm script vào package.json

Thêm lệnh new-blog-post vào phần script trong file package.json

"scripts": { "new-blog-post": "node createNewBlogPost.js"
}

Chạy thử lệnh

Bây giờ khi tạo bài viết mới, bạn chỉ cần chạy lệnh:

npm run new-blog-post

Bạn chỉ cần nhập theo những gì yêu cầu trên console, ví dụ như sau: img.png

Khi có thông báo Created new blog post... tức là đã tạo thành công. Tiến hành mở thứ file vừa được tạo ra ta được kết quả như sau:

img_1.png

Tổng kết

Như vậy là đã xong, chỉ với vài bước đơn giản mà từ giờ mỗi khi viết bài mới chúng ta chỉ cần gõ 1 lệnh đơn giản là đã tạo được file markdown mới để viết blog. Nếu các bạn thấy hữu ích thì cho mình xin 1 tim vào bài blog cá nhân để ủng hộ mình nhé. Cảm ơn các bạn rất nhiều ❤️.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Giới thiệu Typescript - Sự khác nhau giữa Typescript và Javascript

Typescript là gì. TypeScript là một ngôn ngữ giúp cung cấp quy mô lớn hơn so với JavaScript.

0 0 500

- vừa được xem lúc

Bạn đã biết các tips này khi làm việc với chuỗi trong JavaScript chưa ?

Hi xin chào các bạn, tiếp tục chuỗi chủ đề về cái thằng JavaScript này, hôm nay mình sẽ giới thiệu cho các bạn một số thủ thuật hay ho khi làm việc với chuỗi trong JavaScript có thể bạn đã hoặc chưa từng dùng. Cụ thể như nào thì hãy cùng mình tìm hiểu trong bài viết này nhé (go).

0 0 414

- vừa được xem lúc

Một số phương thức với object trong Javascript

Trong Javascript có hỗ trợ các loại dữ liệu cơ bản là giống với hầu hết những ngôn ngữ lập trình khác. Bài viết này mình sẽ giới thiệu về Object và một số phương thức thường dùng với nó.

0 0 136

- vừa được xem lúc

Tìm hiểu về thư viện axios

Giới thiệu. Axios là gì? Axios là một thư viện HTTP Client dựa trên Promise.

0 0 117

- vừa được xem lúc

Imports và Exports trong JavaScript ES6

. Giới thiệu. ES6 cung cấp cho chúng ta import (nhập), export (xuất) các functions, biến từ module này sang module khác và sử dụng nó trong các file khác.

0 0 93

- vừa được xem lúc

Bài toán đọc số thành chữ (phần 2) - Hoàn chỉnh chương trình dưới 100 dòng code

Tiếp tục bài viết còn dang dở ở phần trước Phân tích bài toán đọc số thành chữ (phần 1) - Phân tích đề và những mảnh ghép đầu tiên. Bạn nào chưa đọc thì có thể xem ở link trên trước nhé.

0 0 229