情况:
- 我有一个nuxt 3应用程序,并希望将其码头化。
- Docker容器将部署在DEV/TEST/PROD环境中。
- env中有一些ENVVAR也在nuxt.config.ts的runtimeConfig中声明。
- 这些ENV VAR依赖于DEV/TEST/PROD环境,需要在docker的运行时[NOT BUILD]上导入
我尝试的事情:
- 在Dockerfile中,我有一个
ENTRYPOINT ["/entrypoint.sh"]
,它替换了文件.output/public/_nuxt/entry.XXXXXX.js中的ENV VAR,例如sed -i 's|e.public.API_PUBLIC_URL|'\"${API_PUBLIC_URL}\"'|g' .output/public/_nuxt/entry.XXXXXX.js
- 我在本地运行了
npm run build
并手动修改了entry.*.js。
结果:
- Docker中的脚本替换和使用vi手动替换会破坏/损坏应用程序。应用程序无法启动,并表示entry.xxxxx.js已损坏。
问题:
- 是否可以在构建后调整nuxt 3.output文件?
- nuxt有js文件的校验吗?
- 有没有其他方法可以在运行时在nuxt 3 docker应用中注入ENV VAR?
多克尔文件
FROM node:18-alpine3.16 as build-stage
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY ./ .
RUN npm run build
FROM node:18-alpine3.16 as production-stage
RUN mkdir /app
COPY --from=build-stage /app/.output /app/.output
ENV NUXT_HOST=0.0.0.0
ENV NUXT_PORT=3000
COPY /entrypoint.sh /entrypoint.sh
EXPOSE 3000
ENTRYPOINT ["/entrypoint.sh"]
entrypoint.sh
ROOT_DIR=/app
# Replace env vars in JavaScript files
echo "Replacing env constants in JS"
for file in $ROOT_DIR/.output/public/_nuxt/entry.*.js
do
echo "Processing $file ...";
sed -i 's|e.public.API_AUTH_DOMAIN|'\"${API_AUTH_DOMAIN}\"'|g' $file
sed -i 's|e.public.API_PROTOCOL|'\"${API_PROTOCOL}\"'|g' $file
sed -i 's|e.public.API_PUBLIC_URL|'\"${API_PUBLIC_URL}\"'|g' $file
done
node "/app/.output/server/index.mjs"
docker entrypoint和手动替换浏览器中的错误x1c 0d1x
更新:
我发现改了entry.js后加载不完全
这是浏览器,Id a
中js的结尾,但它变成了,Id as w,bx as x,Sx as y,vx as z};
。这意味着我的文件的长度通过替换ENV VARS而增加了。但这怎么会发生冲突呢?
1条答案
按热度按时间j1dl9f461#
通过
runtimeConfig
设置时,Nuxt将应用ENV变量。例如,当您设置
runtimeConfig.apiUrl
时,env变量将是NUXT_API_URL
。更多在docs