用命令行把你的markdown轉成PDF吧

這篇文章將介紹一個開源項目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%

經過測試,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   

效果



下一篇會嘗試更換主題~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章