为 sharp 库设置 webpack 和 docker

setup webpack and docker for sharp library

我正在尝试将 sharp(节点图像处理库)与 docker 和 webpack 一起使用。在我自己的机器上,我的本地环境一切正常,但是当我使用 docker 时,一切都不起作用,我得到一个错误 Can't find module sharp

在webpack配置中,我将sharp标记为外部依赖

externals: {
    sharp: 'sharp',
}

我将我的服务器捆绑在一个文件 main.js 中,然后将该文件复制到 docker 容器,最后在我的 docker 容器上安装 sharp。这是我的 Docker 文件

FROM node:12.18.1

USER node
ENV NPM_CONFIG_PREFIX=/home/node/.npm-global
ENV PATH=$PATH:/home/node/.npm-global/bin:/home/node/.npm-global/lib
 
RUN mkdir -p /home/node/server
WORKDIR /home/node/server


ENTRYPOINT ["node", "main.js"]
COPY dist/ .
RUN npm install --global  --verbose --arch=x64 --platform=linux sharp

我确认 sharp 确实安装在 /home/node/.npm-global/lib 中,所以我不确定为什么我的包 main.js 找不到它?

原来这只是一个节点路径问题。所以我必须在运行时将 NODE_PATH 环境变量设置为 /home/node/.npm-global/bin:/home/node/.npm-global/lib/node_modules。这样做之后问题就解决了,我的包可以找到 sharp 模块