-
I'm trying to import svg as react component in next, according to https://dev.to/dolearning/importing-svgs-to-next-js-nna, I add @svgr/webpack to my next.config.js, so I can import svg file as a react component, and next build works well. But when I was trying to build docker image, next build didn't work well.
/**
* @type {import('next').NextConfig}
*/
const nextConfig = {
/* config options here */
output: "standalone",
webpack: (config) => {
config.module.rules.push({
test: /\.svg$/,
use: ["@svgr/webpack"],
});
return config;
},
};
module.exports = nextConfig;
# https://github.com/vercel/next.js/blob/canary/examples/with-docker/Dockerfile
# Install dependencies only when needed
FROM node:16-alpine AS deps
# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed.
RUN apk add --no-cache libc6-compat
WORKDIR /app
COPY package.json yarn.lock ./
RUN yarn install --frozen-lockfile
# If using npm with a `package-lock.json` comment out above and use below instead
# COPY package.json package-lock.json ./
# RUN npm ci
# Rebuild the source code only when needed
FROM node:16-alpine AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
# Next.js collects completely anonymous telemetry data about general usage.
# Learn more here: https://nextjs.org/telemetry
# Uncomment the following line in case you want to disable telemetry during the build.
ENV NEXT_TELEMETRY_DISABLED 1
RUN yarn build
# If using npm comment out above and use below instead
# RUN npm run build
# Production image, copy all the files and run next
FROM node:16-alpine AS runner
WORKDIR /app
ENV NODE_ENV production
# Uncomment the following line in case you want to disable telemetry during runtime.
ENV NEXT_TELEMETRY_DISABLED 1
RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 nextjs
# You only need to copy next.config.js if you are NOT using the default configuration
# COPY --from=builder /app/next.config.js ./
COPY --from=builder /app/public ./public
COPY --from=builder /app/package.json ./package.json
# Automatically leverage output traces to reduce image size
# https://nextjs.org/docs/advanced-features/output-file-tracing
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
USER nextjs
EXPOSE 3000
ENV PORT 3000
CMD ["node", "server.js"] development environment:
repo for reproduction: https://github.com/Debonex/debonex-blog/tree/deploy |
Beta Was this translation helpful? Give feedback.
Replies: 1 comment 5 replies
-
In the Dockerfile it says: # You only need to copy next.config.js if you are NOT using the default configuration
# COPY --from=builder /app/next.config.js ./ So you need to uncomment that line, and let it copy the # You only need to copy next.config.js if you are NOT using the default configuration
COPY --from=builder /app/next.config.js ./ Edit - Solutionimport GithubSvg from "components/blog/svg/github.svg"; Is incorrect because the file system has: components
├── Test.tsx
├── blog
│ ├── Keyword.tsx
│ └── svg
│ └── Github.svg
└── layouts
└── BaseLayout.tsx The right import ought to be: import GithubSvg from "components/blog/svg/Github.svg"; |
Beta Was this translation helpful? Give feedback.
In the Dockerfile it says:
So you need to uncomment that line, and let it copy the
next.config.js
file.Edit - Solution
Is incorrect because the file system has:
The right import ought to be: