针对错误的NODE_MODULE_VERSION的node-gyp编译

mxc*_*xcd 9 node.js npm node-gyp docker

我已经建立了一个Gitlab CI管道,该管道在第一阶段编译了一个本地nodejs插件,在第二阶段对其进行了一些测试。作业在同一Docker映像上运行:

FROM ubuntu:18.04
RUN apt update
RUN apt install -y git cmake gcc build-essential nodejs npm curl
RUN npm i -g n
RUN n latest
RUN npm i -g node-gyp
RUN npm i -g yarn
Run Code Online (Sandbox Code Playgroud)

尽管两个阶段都在同一个docker映像上运行,但是在运行测试时我得到以下错误消息:

Error: The module '<path_to_module>'
was compiled against a different Node.js version using
NODE_MODULE_VERSION 64. This version of Node.js requires
NODE_MODULE_VERSION 57.
Run Code Online (Sandbox Code Playgroud)

即使以当前nodejs版本的形式为node-gyp提供所需的目标,也不会更改此设置:

node-gyp configure --target=$(node --version)
node-gyp build --target=$(node --version)
Run Code Online (Sandbox Code Playgroud)

降级nodejs版本会使错误消失:
在Dockerfile中:

RUN n 8.15.0
Run Code Online (Sandbox Code Playgroud)

如何针对LTS版本的nodejs(当前为10.15.1)编译本机插件

Uli*_*ses 2

也许编译未完成,因为现有模块。尝试使用重建,然后清理旧模块。

node-gyp configure --target=$(node --version)
node-gyp rebuild
node-gyp clean
Run Code Online (Sandbox Code Playgroud)

希望这有帮助