为NodeJS应用构建Docker时找不到模块错误

时间:2019-01-30 19:33:02

标签: node.js docker dockerfile

我为节点应用程序编写了一个DockerFile。这是docker文件:

FROM node:10.15.0

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

当我尝试构建此Dockerfile时,出现以下错误:ERROR in ./app/main.js Module not found: Error: Can't resolve './ResetPwd' in '/frontend/app'

因此,我在Dockerfile中添加了RUN lsRUN ls /app。这两个文件都在那里!我对NodeJS并不熟悉,它完全是构建过程。有人可以帮我吗?

要点:我不确定是否有帮助,但是我也正在使用Webpack。

4 个答案:

答案 0 :(得分:2)

这个问题救了我!

希望这对其他人有帮助。

我有一个角度应用程序,我试图使用docker对其进行容器化。

我在Windows计算机上构建该应用程序。并且我试图在Linux容器中构建它。

该应用在我的Windows计算机上运行良好,并且在docker环境中失败并出现以下错误:

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

找不到模块'../../../node_modules/rxjs/Observable.d.ts'。 从'rxjs / observable'导入{Observable};

这让我发疯。

我看到了这个问题,起初并不认为这是怎么回事。第二天,我决定在Linux环境中构建相同的应用程序,只是为了确保。二手WSL 2和吊杆:

真正的问题!

错误TS1149中的错误:文件名'/../../node_modules/rxjs/observable.d.ts'与已经包含的文件名'/../../node_modules/rxjs/Observable.d不同。 ts'仅在大小写中。

6从'rxjs / observable'导入{Observable};

所以这是一个套管问题。我更正了套管,它的构造很好!

答案 1 :(得分:0)

我不确定这是否行得通,因为我不知道npm start是否实际触发了webpack,但是如果不触发,则必须在该行之后添加额外的RUNCOPY frontend /

这里有一些问题,请尝试使用此docker文件

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"]

确保还更新.dockerignore以包括node_modules。您必须使用以下命令来构建和运行容器。

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

-p和8080:8080与将内部端口暴露给外界有关,因此您可以在浏览器中查看它,只需将其更改为Web Pack用于显示内容的任何端口即可。

答案 2 :(得分:0)

问题是我们的前端开发人员认为节点导入不区分大小写,并且他使用的是Windows。我试图在Mac上运行Dockerfile,这就是为什么它找不到模块的原因。模块名称为resetPass!

答案 3 :(得分:0)

我不得不重建破坏性软件包,就像在this issue for node-sass

中一样

命令为npm rebuild <package-name>

对我来说,这是npm rebuild node-sass