Itay Ganor
Itay Ganor

Reputation: 4205

Cannot build for production in GitHub Actions using webpack

I'm trying to deploy my project to Firebase Hosting using the following action:

on:
  push:
    branches:
      - master
  pull_request:
    branches:
      - master

jobs:
  deploy_to_firebase_hosting:

    runs-on: ubuntu-latest

    steps:
      - name: Checkout the repository
        uses: actions/checkout@master

      - name: Install Dependencies
        run: npm install

      - name: Build for production
        run: npm run build-prod

      - name: Deploy to Firebase
        uses: w9jds/firebase-action@master
        with:
          args: deploy --only hosting
        env:
          FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }}

The actions gets failed on Build For Production step. My build-prod script does webpack -p --mode production.

This is the error message for this failure:

> [email protected] build-prod /home/runner/work/project-name/project-name
> webpack -p --mode production

/home/runner/work/project-name/project-name/node_modules/webpack-cli/bin/cli.js:93
                throw err;
                ^

TypeError: Cannot convert undefined or null to object
    at Function.keys (<anonymous>)
...

I've been researching about this error and I found out that people solve it by deleting node_modules before running the build. So I ran another action, without the npm install part.

It fails again on Build for production, but with a different, much reasonable error:

> webpack -p --mode production


webpack not installed

Install webpack to start bundling: 
  $ npm install --save-dev webpack

npm ERR! code ELIFECYCLE
npm ERR! errno 1

What's the correct way to build a production bundle in Github Actions?

Thanks!

Upvotes: 6

Views: 4367

Answers (1)

Brandon Dooley
Brandon Dooley

Reputation: 124

I had the exact same issue when trying to use GitHub actions to build & deploy a production Docker container.

It turned out the issue on my side was as a result of Webpack not having access to any environment variables (which my Webpack config required) at the point of build which caused it to error out with the same error you received above.

To fix this I added the following line to my build command:

--env.NODE_ENV=production

E.g my final build command called by the container was then:

node --max_old_space_size=4096 ./node_modules/webpack/bin/webpack.js --env.NODE_ENV=production --progress --config webpack.prod.js

Hope this helps!

Upvotes: 1

Related Questions