這篇文章將介紹一個開源項目markdown-pdf的使用,以及遇到的
一個無數個坑
前提
需要node.js
環境,沒有的請自行百度安裝node.js
安裝markdown-pdf
這一條是官網的安裝教程
解釋一下參數,npm
是一個node.js
的包管理工具,-g
是全局安裝,指安裝後可以作爲一個命令使用,--ignore-scripts
是忽略一些腳本(package.json
中的script
)
npm install -g markdown-pdf --ignore-scripts
但是跑着跑着如果發現報錯,原因是權限不足,我們在linux和macOS環境下需要sudo
sudo npm install -g markdown-pdf --ignore-scripts
終於成功裝好了,趕緊試用一個
jabin@jabin-deepin ~/Code/tmp [16:25:24]
> $ markdown-pdf lesson01.md
internal/validators.js:125
throw new ERR_INVALID_ARG_TYPE(name, 'string', value);
^
TypeError [ERR_INVALID_ARG_TYPE]: The "file" argument must be of type string. Received type object
at validateString (internal/validators.js:125:11)
at normalizeSpawnArguments (child_process.js:399:3)
at spawn (child_process.js:532:38)
at Object.execFile (child_process.js:221:15)
at WriteStream.<anonymous> (/usr/lib/node_modules/markdown-pdf/index.js:117:22)
at WriteStream.emit (events.js:194:15)
at finishMaybe (_stream_writable.js:641:14)
at stream._final (_stream_writable.js:619:5)
at WriteStream._final (internal/fs/streams.js:263:3)
at callFinal (_stream_writable.js:612:10)
又發現了錯誤!這個錯誤的解決方法就是先卸載已經裝好的模塊,去掉--ignore-scripts
重裝一遍
- 卸載
sudo npm uninstall -g markdown-pdf
- 去掉參數重裝
sudo npm install -g markdown-pdf
去掉參數之後,會被檢測出來缺少一個模塊phantomjs,然後腳本會自動安裝,問題是,這個模塊的下載速度奇慢無比,掛了10分鐘甚至卡在8%不動了
jabin@jabin-deepin:~$ sudo npm install -g markdown-pdf
npm WARN deprecated [email protected]: this package is now deprecated
/usr/bin/markdown-pdf -> /usr/lib/node_modules/markdown-pdf/bin/markdown-pdf
> [email protected] install /usr/lib/node_modules/markdown-pdf/node_modules/phantomjs-prebuilt
> node install.js
PhantomJS not found on PATH
Downloading https://github.com/Medium/phantomjs/releases/download/v2.1.1/phantomjs-2.1.1-linux-x86_64.tar.bz2
Saving to /tmp/phantomjs/phantomjs-2.1.1-linux-x86_64.tar.bz2
Receiving...
[===-------------------------------------] 8%
輸出信息可以看到鏈接,嘗試使用瀏覽器下載https://github.com/Medium/phantomjs/releases/download/v2.1.1/phantomjs-2.1.1-linux-x86_64.tar.bz2
發現速度非常慢,原因是中國特有的設施影響了我們的訪問可以看到腳本會下載資源,然後放在對應的路徑,所以我們手動下載文件然後放在對應的路徑,至於文件,你們可以到我的百度雲下載,
linux、macOS、windows三版本彙總鏈接
鏈接: https://pan.baidu.com/s/1Ubxqe-RF_H_g5HJvc4CFmQ 提取碼: qwbw將文件下載好,放在對應的路徑(比如我的輸出爲
/tmp/phantomjs/
文件夾下)
經過測試,macOS和linux的路徑都是
/tmp/phantomjs/
jabin@jabin-deepin /tmp/phantomjs [17:00:07]
> $ sudo npm install -g markdown-pdf
npm WARN deprecated [email protected]: this package is now deprecated
/usr/bin/markdown-pdf -> /usr/lib/node_modules/markdown-pdf/bin/markdown-pdf
> [email protected] install /usr/lib/node_modules/markdown-pdf/node_modules/phantomjs-prebuilt
> node install.js
PhantomJS not found on PATH
Download already available at /tmp/phantomjs/phantomjs-2.1.1-linux-x86_64.tar.bz2
Verified checksum of previously downloaded file
Extracting tar contents (via spawned process)
Removing /usr/lib/node_modules/markdown-pdf/node_modules/phantomjs-prebuilt/lib/phantom
Copying extracted folder /tmp/phantomjs/phantomjs-2.1.1-linux-x86_64.tar.bz2-extract-1570611629575/phantomjs-2.1.1-linux-x86_64 -> /usr/lib/node_modules/markdown-pdf/node_modules/phantomjs-prebuilt/lib/phantom
Phantom installation failed { [Error: EACCES: permission denied, link '/tmp/phantomjs/phantomjs-2.1.1-linux-x86_64.tar.bz2-extract-1570611629575/phantomjs-2.1.1-linux-x86_64' -> '/usr/lib/node_modules/markdown-pdf/node_modules/phantomjs-prebuilt/lib/phantom']
errno: -13,
code: 'EACCES',
syscall: 'link',
path:
'/tmp/phantomjs/phantomjs-2.1.1-linux-x86_64.tar.bz2-extract-1570611629575/phantomjs-2.1.1-linux-x86_64',
dest:
'/usr/lib/node_modules/markdown-pdf/node_modules/phantomjs-prebuilt/lib/phantom' } Error: EACCES: permission denied, link '/tmp/phantomjs/phantomjs-2.1.1-linux-x86_64.tar.bz2-extract-1570611629575/phantomjs-2.1.1-linux-x86_64' -> '/usr/lib/node_modules/markdown-pdf/node_modules/phantomjs-prebuilt/lib/phantom'
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] install: `node install.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2019-10-09T09_00_32_201Z-debug.log
發現還是報錯,儘管sudo了,還是permission denied,這需要我們在後面加上參數--unsafe-perm
,執行sudo npm install -g markdown-pdf --unsafe-perm
jabin@jabin-deepin /usr/lib/node_modules [18:32:58]
> $ sudo npm install -g markdown-pdf --unsafe-perm
npm WARN deprecated [email protected]: this package is now deprecated
/usr/bin/markdown-pdf -> /usr/lib/node_modules/markdown-pdf/bin/markdown-pdf
> [email protected] install /usr/lib/node_modules/markdown-pdf/node_modules/phantomjs-prebuilt
> node install.js
PhantomJS not found on PATH
Download already available at /tmp/phantomjs/phantomjs-2.1.1-linux-x86_64.tar.bz2
Verified checksum of previously downloaded file
Extracting tar contents (via spawned process)
Removing /usr/lib/node_modules/markdown-pdf/node_modules/phantomjs-prebuilt/lib/phantom
Copying extracted folder /tmp/phantomjs/phantomjs-2.1.1-linux-x86_64.tar.bz2-extract-1570617196654/phantomjs-2.1.1-linux-x86_64 -> /usr/lib/node_modules/markdown-pdf/node_modules/phantomjs-prebuilt/lib/phantom
Writing location.js file
Done. Phantomjs binary available at /usr/lib/node_modules/markdown-pdf/node_modules/phantomjs-prebuilt/lib/phantom/bin/phantomjs
+ [email protected]
added 106 packages from 381 contributors in 13.885s
jabin@jabin-deepin /usr/lib/node_modules [18:33:19]
> $
試用
jabin@jabin-deepin ~/Code/tmp [18:37:36]
> $ markdown-pdf lesson01.md
效果
下一篇會嘗試更換主題~~