作者:ggty11 | 来源:互联网 | 2022-12-06 17:52
因此,我有一个create-react-app-ts
要Dockerize并托管在Zeit Now上的应用程序。
一切工作正常本地,运行yarn tsc
和react-scripts-ts build
伟大工程。
从以下Dockerfile创建Docker映像也非常有用:
FROM mhart/alpine-node:10.9
WORKDIR /usr/src
ARG REACT_APP_API_ENDPOINT
ARG NODE_ENV
COPY yarn.lock package.json ./
RUN yarn
COPY . .
RUN yarn build && mv build /public
但是,发布到Now时,生成脚本在Typescript编译时失败,从而为项目中的大多数文件输出编译错误。
如果我ENV NODE_ENV production
在上面的Dockerfile中进行设置,我也可以在本地复制该文件WORKDIR...
。
因此,似乎TypeScript或react-scripts-ts
行为不同NODE_ENV=production
。我以前从未遇到过此错误,而且我也不知道如何调试它。在本地运行NODE_ENV=production tsc
或NODE_ENV=production react-scripts-ts build
也可以正常工作。
我正在使用以下配置运行Typescript v 3.0.1:
{
"compilerOptions": {
"baseUrl": ".",
"outDir": "build/dist",
"module": "esnext",
"target": "es6",
"lib": ["es6", "dom", "esnext.asynciterable"],
"sourceMap": true,
"allowJs": true,
"jsx": "react",
"moduleResolution": "node",
"rootDir": "src",
"forceConsistentCasingInFileNames": true,
"noImplicitReturns": true,
"noImplicitThis": true,
"noImplicitAny": true,
"strictNullChecks": true,
"suppressImplicitAnyIndexErrors": true,
"noUnusedLocals": true,
"allowSyntheticDefaultImports": true,
"strict": true
},
"exclude": ["node_modules", "build", "scripts", "acceptance-tests", "webpack", "jest", "src/setupTests.ts"]
}
任何建议将不胜感激!:)
编辑:将env var args添加到Dockerfile。为了简洁起见,最初将其省略,但最终成为问题和解决方案的一部分
1> jhm..:
所以我终于找到了问题!在我的原著中Dockerfile
,NODE_ENV
被设定为之前 yarn install
。这意味着对于生产版本,yarn
将不会安装devDependencies
,因此不会安装我的任何@types
库。这导致了整个项目的所有编译错误。
在解决问题中移动了“在... NODE_ENV
以下/之后” 的定义。yarn install
Dockerfile
FROM mhart/alpine-node:10.9
WORKDIR /usr/src
COPY yarn.lock package.json ./
RUN yarn
ARG REACT_APP_API_ENDPOINT
ARG NODE_ENV
COPY . .
RUN yarn build && mv build /public
注意:据我所知,请yarn build
确保devDependencies
再次删除,所以不必担心会膨胀您的构建。:)