Nodejs để duyệt file, đổi tên file, rồi move vào folder mới vừa được tạo
TIL
607
gatsby
1
Jekyll
4
White

Minh-Trung Nguyễn viết ngày 17/04/2018

Nodejs để duyệt file, đổi tên file, rồi move vào folder mới vừa được tạo

Day 40:

Bài toán:

Khi chuyển blog từ Jekyll sang Gatsby, cần phải xử lý đống bài viết từ blog cũ:

Format file bài viết của blog cũ (Jekyll): Chỉ duy nhất 01 file.

2018-02-22-JavScript-regexp-percentage.md

Format file bài viết trên blog mới (Gatsby): File đặt trong 1 folder, folder được đặt theo tên file cũ, file mới đổi thành index.md

2018-02-22-JavScript-regexp-percentage
    |
    |______index.md

Có khoảng 50 bài viết. Không làm tay, làm tự động như thế nào?

Giải quyết:

Sử dụng các API mục File System của Node.js. Tạo project luôn trong folder chứa các file bài viết .md cho tiện.

Thực ra là ta sẽ cần 2 thư viện:

  • Thư viện slugify để thanh tẩy chuỗi. Xem thư viện này ở đây
  • Thư viện fs-extra để xử lý vụ copy file. Cái này fs cũng làm được, nhưng khi đọc trên Stackoverflow thì có người bị báo lỗi, và gợi ý dùng thư viện này.

Các bước cũng đơn giản:

  • Bước 1: Dùng fs.readdir để đọc các file trong folder chỉ định.
  • Bước 2: Chạy vòng lặp cho từng file, loại bớt ký tự đặc biệt, xóa bỏ đuôi .md để tạo tên folder.
  • Bước 3: Copy file và đồng thời đổi tên file vào folder mới. Tên file là index.md, tên folder đã được gán ở bước 2. Lệnh fs.copy này đơn giản chỉ cần 2 thông số truyền vào: Nguồn (file hiện tại), và Đích (./${folderName}/index.md). Do folder đích chưa tồn tại, nên lệnh fs.copy() tạo luôn folder mới. Một công đôi việc.
const slugify = require('slugify'); //  thư viện để thanh tẩy chuỗi, loại bỏ những ký tự đặc biệt
const fs = require('fs-extra');
const folder = './'; // gán vào folder hiện tại
const arr = [];

fs.readdir(folder, (err, files) => {

    if (err) throw err;

    files.forEach(file => {
        const regexp = /.md$/;
        let cleanedFileName = slugify(file, {remove: /[()]/g});
        const folderName = cleanFileName.replace(regexp, ""); // remove extension ".md"
        fs.copy(file, `./${folderName}/index.md`, err => {
            if (err) return console.log(err);
            console.log("success!")
        })
    })
})

Kết luận

Script trên chạy ngon về tổng thể. Còn nội dung bên trong từng file phải chỉnh sửa tí chút bằng thủ công, chưa làm tự động được.

Tham khảo:

ngminhtrung 13-04-2018

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Minh-Trung Nguyễn

58 bài viết.
74 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
44 15
Đăng lại một bài đã viết từ cách đây mấy tháng. Chủ đề này đã có không ít, nhưng chẳng hiểu sao lượng bài tự viết của dân lập trình người Việt ta v...
Minh-Trung Nguyễn viết 4 tháng trước
44 15
White
27 5
Ghi chú: Tiêu đề hoàn toàn mang tính câu view. Bài copy từ blog của tác giả :) Tại sao lại có bài viết này? Một ngày đẹp giời tôi cần kiểm t...
Minh-Trung Nguyễn viết 8 tháng trước
27 5
White
16 4
Về bước tìm và xử lý dữ liệu của Việt Nam phục vụ Data Visualization nền web Làm việc với D3js được nửa năm, một trong những điều bận lòng là chưa...
Minh-Trung Nguyễn viết 3 tháng trước
16 4
Bài viết liên quan
White
12 1
Trước đây vài ngày, tôi có chuyển hẳn website từ (Link) sử dụng Namecheap hosting sang (Link) sử dụng (Link) lưu trữ website trực tiếp trên Github....
Nguyễn Việt Anh viết 1 năm trước
12 1
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
58 bài viết.
74 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!