想打包我的node项目,但是一直出node-sass
的错误
第一步:打包一个base镜像,下载镜像中package.json
中的依赖包
dockerfile:
FROM node:10.14.1-alpine
MAINTAINER gstorms
ENV TZ Asia/Shanghai
ARG registry=https://registry.npm.taobao.org
RUN yarn config set registry ${registry}
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY package.json ./
RUN yarn
RUN npm rebuild node-sass --force
COPY . /usr/src/app
CMD ["yarn", "start"]
第二步:基于这个镜像,打包项目:
dockerfile:
FROM gstorms/node-base:1.3
WORKDIR /usr/src/app
COPY . /usr/src/app
CMD ["yarn", "start"]
使用docker-compose操作,但是执行up的时候node-sass一直出错:
ERROR in ./src/app/app.component.scss
fronta_1 | Module build failed (from ./node_modules/sass-loader/lib/loader.js):
fronta_1 | Error: Missing binding /usr/src/app/node_modules/node-sass/vendor/linux_musl-x64-64/binding.node
fronta_1 | Node Sass could not find a binding for your current environment: Linux/musl 64-bit with Node.js 10.x
fronta_1 |
fronta_1 | Found bindings for the following environments:
fronta_1 | - Windows 64-bit with Node.js 10.x
fronta_1 |
fronta_1 | This usually happens because your environment has changed since running `npm install`.
fronta_1 | Run `npm rebuild node-sass` to download the binding for your current environment.
fronta_1 | at module.exports (/usr/src/app/node_modules/node-sass/lib/binding.js:15:13)
fronta_1 | at Object.<anonymous> (/usr/src/app/node_modules/node-sass/lib/index.js:14:35)
fronta_1 | at Module._compile (internal/modules/cjs/loader.js:688:30)
fronta_1 | at Object.Module._extensions..js (internal/modules/cjs/loader.js:699:10)
fronta_1 | at Module.load (internal/modules/cjs/loader.js:598:32)
fronta_1 | at tryModuleLoad (internal/modules/cjs/loader.js:537:12)
fronta_1 | at Function.Module._load (internal/modules/cjs/loader.js:529:3)
fronta_1 | at Module.require (internal/modules/cjs/loader.js:636:17)
fronta_1 | at require (internal/modules/cjs/helpers.js:20:18)
fronta_1 | at Object.sassLoader (/usr/src/app/node_modules/sass-loader/lib/loader.js:46:72)
package.json(部分):
{
"name": "fronta",
"version": "1.0.0",
"scripts": {
...
},
"private": true,
"dependencies": {
...
"node-sass": "^4.12.0",
...
},
"devDependencies": {
...
}
}
本机:win10
docker: docker desktop for windows
这个不知道怎么解决了,求大神指教。
知道什么原因了
我是用
docker-compose
编排构建的,在docker-compose.yml
文件中进行文件挂载的时候将整个项目目录(包含node_modules目录)挂载了上去,运行项目的时候本机(windows)的目录将容器中的目录覆盖了,所以找不到对应系统(容器是Linux)的binding.node文件