Nuxt3在运行时dockerize并替换env

idfiyjo8  于 2023-04-11  发布在  Docker
关注(0)|答案(1)|浏览(416)

情况:

  • 我有一个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而增加了。但这怎么会发生冲突呢?

j1dl9f46

j1dl9f461#

通过runtimeConfig设置时,Nuxt将应用ENV变量。
例如,当您设置runtimeConfig.apiUrl时,env变量将是NUXT_API_URL
更多在docs

相关问题