如何自己搞一個(gè)維基百科?

大家平時(shí)查詢資料都喜歡用什么搜索工具呢?
也許很多人都是百度吧,但是也有一部分小伙伴習(xí)慣使用維基百科~
維基百科(Wikipedia),又稱人民的百科全書,是來自世界各地的人民用不同的語言共同創(chuàng)建的百科全書。
它基于wiki技術(shù),強(qiáng)調(diào)自由、免費(fèi)、內(nèi)容開放,任何人都可以編輯百科全書中的任何條目。其宗旨是為全人類提供一個(gè)動(dòng)態(tài)的、可自由訪問和編輯的全球知識體。
你可以把它看作是一個(gè)純文科類的百度百科的升級國際版,畢竟人們常說:北冥有魚,其名為鯤。鯤之大,不知其幾千里也,錯(cuò)了錯(cuò)了,拿錯(cuò)臺詞了,應(yīng)該是這句,維基百科,海納百川,有容奶大!
哦不不不,是有容乃大~~小編最近那個(gè)編碼太辛苦了(啥啥東西看多了),各位理解理解~
那么大家有沒有想過自己搭建一個(gè)靜態(tài)版本的維基百科呢?
當(dāng)然可以了,今天給大家?guī)淼木褪荊itHub上的一個(gè)開源項(xiàng)目,教你如何使用CSS、JS、WASM和SQLite來搭建這個(gè)靜態(tài)百科~
項(xiàng)目的核心技術(shù)要點(diǎn)在于 將SQLite (written in C) 編譯成 WebAssembly,這樣就可以使用 sql.js 讀取 sqlite 的數(shù)據(jù)庫文件。

不過項(xiàng)目還有點(diǎn)小瑕疵,比如,有時(shí)候頁面會(huì)在加載的時(shí)候自動(dòng)卡住,這個(gè)時(shí)候只能刷新頁面解決。作者似乎還沒找到一個(gè)合適的在SQLite HttpVFS庫中處理正在進(jìn)行的請求的方法,如果有小伙伴是個(gè)中高手也可以自己一改喲~
整體程序運(yùn)行,只需要5個(gè)步驟:
1、獲取維基百科轉(zhuǎn)儲(chǔ)文件
首先去維基百科的dump下載網(wǎng)站,下載所需要的語種和時(shí)間的dump文件。然后從中提取xml文件。
2、將xml文件加載進(jìn)SQLite數(shù)據(jù)庫
運(yùn)行npm install,將xml文件傳輸?shù)睫D(zhuǎn)換器中cat "/path/to/enwiki.xml" | node ./scripts/xml_to_sqlite.js /path/to/output/folder/en.db
這樣就會(huì)在指定的目錄和路徑處創(chuàng)建新的SQLite文件。不過往往這需要不小的硬盤空間(往往需要幾百G)和長達(dá)數(shù)小時(shí)的時(shí)間消耗。
可以運(yùn)行./scripts/sqlite3 /path/to/output/folder/en.db看數(shù)據(jù)準(zhǔn)備情況。
3、構(gòu)建前端
如果小伙伴想測試下SQLite db ,可以運(yùn)行 npm run build 和 npm run serve,如果小伙伴用的是mac,可以將nginx.conf替換系統(tǒng)里的/usr/local/etc/nginx/nginx.conf。
小伙伴要確保一點(diǎn),調(diào)整db.js中的dev URL,使其指向自己本地主機(jī)“en.db”。而不是將db文件放到dist文件夾中,然后執(zhí)行npm run dev。切記切記~
運(yùn)行npm run build,系統(tǒng)會(huì)將"src/" 編譯成 "dist/"。
4、將“dist/”和“db/”部署到靜態(tài)文件主機(jī)
將文件上傳,然后在靜態(tài)主機(jī)上設(shè)置跨域CORS(CORS.example),最后,調(diào)整db.js中的URL。這樣,應(yīng)用程序就可以部署了。
5、重復(fù)完成所有dump文件的操作
如果下載了不同的dump文件,只需要重復(fù)1-4步加入db.js就可以了。
那最終的效果如下:

我們可以看到右上角可以選擇語種,不同的語種只能在對應(yīng)的庫里搜索,就比如你在English庫里搜索二傻子,是不會(huì)有結(jié)果的,同理你在Chinese庫里所搜small也是沒有。
各位天才小伙伴,一起來學(xué)習(xí)下這個(gè)項(xiàng)目吧!項(xiàng)目地址如下:
點(diǎn)擊下方卡片,關(guān)注公眾號“TJ君”
回復(fù)“維基”,獲取倉庫地址
