SyntaxHighlighter 的 npm 构建问题

npm building issues for SyntaxHighlighter

我是 npm 的初学者,正在尝试通过首先使用 git 克隆它来构建 SyntaxHighlighter 版本 4,但失败了。这是我得到的错误:

1 error generated.
make: *** [Release/obj.target/binding/src/create_string.o] Error 1
gyp ERR! build error
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/Users/name/syntaxhighlighter/node_modules/node-gyp/lib/build.js:262:23)
gyp ERR! stack     at ChildProcess.emit (events.js:311:20)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:275:12)
gyp ERR! System Darwin 19.3.0
gyp ERR! command "/usr/local/bin/node" "/Users/name/syntaxhighlighter/node_modules/node-gyp/bin/node-gyp.js" "rebuild" "--verbose" "--libsass_ext=" "--libsass_cflags=" "--libsass_ldflags=" "--libsass_library="
gyp ERR! cwd /Users/name/syntaxhighlighter/node_modules/node-sass
gyp ERR! node -v v12.16.1
gyp ERR! node-gyp -v v3.8.0
gyp ERR! not ok 
Build failed with error code: 1
npm WARN notsup Unsupported engine for karma@0.13.22: wanted: {"node":"0.10 || 0.12 || 4 || 5"} (current: {"node":"12.16.1","npm":"6.13.4"})
npm WARN notsup Not compatible with your version of node/npm: karma@0.13.22
npm WARN syntaxhighlighter@4.0.1 No description

npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! node-sass@3.13.1 postinstall: `node scripts/build.js`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the node-sass@3.13.1 postinstall 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!     /Users/name/.npm/_logs/2020-04-05T02_52_17_048Z-debug.log

尝试仅安装 node_modules。 cd /syntaxhighlighter/node_modules$ 然后尝试使用 npm install 安装。 gulp.js 文件中存在一些错误,导致安装过程出现问题。我已经尝试过旧版本,但其中 none 可用。希望这会成功。

您 运行 遇到的问题是 SyntaxHighlighter 版本 4 太旧,并且您 运行 的 Node 版本不支持它的依赖项。

错误来自的包是 Karma。尝试安装的 Karma 版本是 v0.13.22。该版本的 Karma 仅支持最大 Node 版本 5,而您似乎是 运行 版本 12。

您可以通过降级 Node 版本或使用 Node Version Manager (NVM) 等工具临时降级 Node 版本来解决此问题。

NVM

robdonn 的 NVM 解决方案有效,但是,当 运行 通过 NVM 管理的多个 Node 版本破坏了我的 ApiConnect/Loopback 客户端(仅在 Mac).我一直不明白为什么,但意识到 运行 单个版本的 Node 解决了这个问题。

我还想使用 syntaxhighlighter,我设法使用 Docker 容器生成了 syntaxhighlighter.js 文件。在克隆的目录中,我添加了 Docker 文件。

FROM node:5
# Create app directory
WORKDIR /usr/src/app

# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package*.json ./

RUN npm install

# Bundle app source
COPY . .

此后我能够:

  1. 构建本地 docker 容器
docker build -t syntaxhighlighter .
  1. 运行 容器将我的本地 dist 目录映射到容器的 dist 目录
docker run -i --volume ~/github/syntaxhighlighter/dist:/usr/src/app/dist syntaxhighlighter
  1. 获取本地 运行 容器的容器 ID
docker ps
  1. 使用容器 ID 进入容器(也可以将 CMD ['/bin/sh'] 放入我的 Docker 文件中)
docker exec -it <the-container-id> /bin/sh
  1. 运行 gulp 从 Node v5 容器构建。由于我将本地 dist 目录映射到容器的 dist 目录,因此我在本地获得输出。
./node_modules/gulp/bin/gulp.js build --brushes=all  --compat