Featured image of post File System

File System

File System

getStaticProps

不知道為什麼,getStaticProps 裡面的 fs 時有時無。這裡 似乎有關於這個問題的回答,但無效

正常一

這個版本,就可以正常運作,證明 getStaticProps 裡可以用 fs

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
// pages/index.js
import fs from 'fs/promises';

export async function getStaticProps() {
	console.log(await fs.stat('./content/index.md'));
	const posts = ['index.md'];
	console.log({ posts });
	return {
		props: { posts },
	};
}

正常二

在這個版本,將 fs 相關程式碼移到 util/fsTest.js,也就是測試如果是引用另一個模組中 fs 相關的函數。經過證明,也是可以的

1
2
3
4
5
6
// util/fsTest.js
import fs from 'fs/promises';

export default async function dirs() {
	return await fs.readdir(`${process.cwd()}/content`);
}
1
2
3
4
5
6
7
8
// pages/index.js
import fsTest from '../util/fsTest';

export async function getStaticProps() {
	const posts = ['index.md'];
	console.log({ posts, fsTest: await fsTest() });
	return { props: { posts } };
}

有問題的

這個版本,util/tree.js 的程式碼是經過測試,是沒問題的。但是卻會回報錯誤,找不到 fs

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
// util/tree.js
import fs from 'fs/promises';

async function tree(root, opt) {
	// some verified code
}

function tree2list(tree, opt) {
	// some verified code
}

export { tree, tree2list };
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
// pages/index.js
import { tree, tree2list } from '../util/tree';

export async function getStaticProps() {
	const tree = await tree('./content', { extensions: ['.md'] });
	const posts = tree2list(tree, { sliceHead: 1 });
	return {
		props: { posts },
	};
}
好想養貓阿~~
使用 Hugo 建立
主題 StackJimmy 設計