overtune
NPM dependancy and production build
Hi!
I’m struggling a bit with Phoenix and assets.
I have added a dependancy from npm (installed it in the assets-folder according to the docs).
It works fine for development, but I’m having problems with deployments/production.
I use the generated Dockerfile, but when it tries to build it can’t find the npm-package (npm install has not been runned).
What I find a bit lacking in the docs is if I’m supposed to handle this myself? Or should the esbuild task handle this?
(E.g. do I need to add a buildstep in the Dockerfile where I use node to install the package?)
Thanks!
Marked As Solved
LostKobrakai
That’s the case. The phoenix boilerplate does use neither node nor npm. So if you want to use those you need to add them to all the necessary places including the docker setup.
Also Liked
overtune
I ended up adding a nodejs stage which installs the dependancies first.
Like this:
ARG NODE_BUILDER_IMAGE="node:18.17.1-alpine"
########################################
# 1. Build nodejs frontend
########################################
FROM ${NODE_BUILDER_IMAGE} as node-builder
# prepare build dir
RUN mkdir -p /app/assets
WORKDIR /app
# set build ENV
ENV NODE_ENV=prod
# install npm dependencies
COPY assets/package.json assets/package-lock.json ./assets/
RUN cd assets && npm ci
# build assets
COPY assets assets
And on the builder stage, instead of copying the assets from the host, I copy them from the node builder:
# COPY assets assets
COPY --from=node-builder --chown=nobody:root /app/assets ./assets
This seems to work (at least for my current project/setup).
I also feel that this perhaps should be a part of the generator? Like if it detects a package.json in the assets folder it adds an install step to the Dockerfile.
Last Post!
overtune
Popular in Questions
Other popular topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #elixirconf-us
- #advent-of-code
- #distillery
- #processes
- #forms
- #api
- #metaprogramming
- #security
- #hex









