简体   繁体   中英

Can't find module error when building docker for NodeJS app

I wrote a DockerFile for a node application. This is the docker file:

FROM node:10.15.0

COPY frontend/  frontend/
WORKDIR frontend/ 
RUN npm install
RUN npm start

When I try to build this Dockerfile, I get this error: ERROR in ./app/main.js Module not found: Error: Can't resolve './ResetPwd' in '/frontend/app'

So I added RUN ls & RUN ls /app in Dockerfile. Both of the files are there! I'm not familiar with NodeJS and it's build process at all. Can anybody help me with this?

Point: I'm not sure if it helps or not, but I'm using Webpack too.

The problem was that our front-end developer considered that node imports are case insensitive and he was using windows. I tried to run Dockerfile on mac and that's why it couldn't find the modules. Module name was resetPass!

This question saved me!

hope this helps somebody else.

I have an angular app and I was trying to containerize it using docker.

I build the app on a windows machine. and I was trying to build it inside a linux container.

the app was building fine on my windows machine and failing with the following error in the docker environment:

    ERROR in folder1/folder2/name.component.ts: - error TS2307: Cannot find module '../../../folder1/File.name'.
    
    import { Interface1} from '../../../folder1/File.name';

Cannot find module '../../../node_modules/rxjs/Observable.d.ts'. import { Observable } from 'rxjs/observable';

it was driving me nuts.

I saw this question and at first did not think that it was what was going on. the next day I decided to build the same app in a linux environment just to make sure. Used WSL 2 and boom:

the real problem!

ERROR in error TS1149: File name '/../../node_modules/rxjs/observable.d.ts' differs from already included file name '/../../node_modules/rxjs/Observable.d.ts' only in casing.

6 import { Observable } from 'rxjs/observable';

SO it was a casing issue. I corrected the casing and it builds fine!

I cant say if this will work for sure since I don't know if npm start actually triggers webpack, but if it doesn't you'll have to add an extra RUN line after the COPY frontend / line

There are a few issues here, try using this docker file instead

FROM node:10.15.0

# Copy dependency files and install packages
WORKDIR frontend
COPY frontend/package.* .
RUN npm install

# Copy src down and other stuff
COPY frontend /

# cd to the file with the package.json
WORKDIR /appDir/frontend

# Command that executes when container starts up
CMD ["npm", "start"]

Make sure that you also update your .dockerignore to include node_modules. You'll have to build and run the container with the following commands.

docker build -t frontendApp .
docker run -p 8080:8080 frontendApp

The -p and 8080:8080 have to do with exposing internal ports to the outside world so you can view it in a browser, just change it to whatever port web pack is using to display your stuff.

I had to rebuild the disruptive package, like in this issue for node-sass

The command would be npm rebuild <package-name>

For me, this was npm rebuild node-sass

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM