Windows下Gitbook安装

Creative Commons
本作品采用知识共享署名

本文说明在Windows下安装Gitbook遇到的问题和处理方式。

使用WSL后一些工作环境都切回到Windows进行,Linux下面需要用的东西基本都可以在WSL下面解决,不过今天在WSL下安装Gitbook遇到一些问题,最后还是只能在Windows下直接安装Gitbook。

WSL下安装GitBook

先说结论:目前无法在WSL下安装GitBook, 也许可以在WSL2上面安装。
一般Ubuntu下安装GitBook方法如下:

1
2
3
sudo apt install nodejs
sudo apt install npm
sudo npm install -g gitbook-cli

在WSL下执行sudo apt install nodejs会遇到下面问题

installed libc-bin package post-installation script subprocess returned error exit status 134

处理方式如下

1
2
3
4
5
sudo mv /var/lib/dpkg/info/libc-bin.* /tmp/
sudo dpkg --remove --force-remove-reinstreq libc-bin
sudo dpkg --purge libc-bin
sudo apt install libc-bin
sudo mv /tmp/libc-bin.* /var/lib/dpkg/info/

在WSL下执行sudo apt install npm正常
在WSL下执行sudo npm install -g gitbook-cli会遇到下面问题,目前没找到解决方法。

npm ERR! Linux 4.4.0-19041-Microsoft
npm ERR! argv “/usr/bin/node” “/usr/bin/npm” “install” “-g” “gitbook-cli”
npm ERR! node v8.10.0
npm ERR! npm v3.5.2
npm ERR! path /usr/local/lib/node_modules/.staging/json-stable-stringify-89a45e3c
npm ERR! code ENOENT
npm ERR! errno -2
npm ERR! syscall rename

Windows下安装GitBook

1.安装nodejs

https://nodejs.org/en/download/下载nodejs安装包安装,安装后默认就有npm
开启Windows Terminal,执行npm install gitbook-cli -g即可完成安装

2.问题处理

  1. 脚本策略问题
    执行gitbook init时出现下面错误

    gitbook : 无法加载文件 C:\Users\frank\AppData\Roaming\npm\gitbook.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。

处理方式:以管理员执行Windows Terminal, 然后执行Set-ExecutionPolicy RemoteSigned命令修改测量

  1. 脚本本身问题
    执行gitbook init时出现下面错误

    C:\Users\frank\AppData\Roaming\npm\node_modules\gitbook-cli\node_modules\npm\node_modules\graceful-fs\polyfills.js:287

    if (cb) cb.apply(this, arguments)
    

处理方式:打开polyfills.js文件,找到287行所在的函数是statFix

1
2
3
4
5
6
7
8
9
10
11
12
13
function statFix (orig) {
if (!orig) return orig
// Older versions of Node erroneously returned signed integers for
// uid + gid.
return function (target, cb) {
return orig.call(fs, target, function (er, stats) {
if (!stats) return cb.apply(this, arguments)
if (stats.uid < 0) stats.uid += 0x100000000
if (stats.gid < 0) stats.gid += 0x100000000
if (cb) cb.apply(this, arguments)
})
}
}

注释调用该函数的地方

1
2
3
//fs.stat = statFix(fs.stat)
//fs.fstat = statFix(fs.fstat)
//fs.lstat = statFix(fs.lstat)

  1. nodejs版本问题
    执行gitbook init时出现下面错误

    TypeError [ERR_INVALID_ARG_TYPE]: The “data” argument must be of type string or an instance of Buffer, TypedArray, or DataView. Received an instance of Promise

处理方式:安装低版本的nodejs,从https://nodejs.org/dist/选择其它nodejs版本,我选择的是node-v12.9.1-x64.msi可以解决。