Skip to content

Unknown argument: --env #1216

Closed
Closed

Description

@Namchee

Describe the bug

I'm trying to set my webpack env for configuration purposes with

webpack --env.platform=node

But, webpack-cli keeps throwing ⬢ webpack: Unknown argument: --env error to me

What is the current behavior?

webpack-cli refuses to read the flag and throw an error instead

To Reproduce
Steps to reproduce the behavior:

Just try to add --env flag to any webpack command.

Expected behavior

webpack-cli should accept and set this variable correctly

Screenshots

error

Additional context

This works on 3.3.10. I'm currently using 4.0.0-beta.2

Activity

  1. lobsterkatie commented on Feb 11, 2020

    @lobsterkatie

    I am having the exact same problem with the mode flag. And yet the docs still include it, and the migration guide for webpack 4 -> 5 mentions it, so it's pretty clear it hasn't been removed... Very confused with this one.

  2. ematipico commented on Feb 12, 2020

    @ematipico
    Contributor

    Please don't install 4.0.0-beta.2 just yet. Unfortunately I published an incorrect version on npm, so sorry about that. Please keep using 3.3.10 or 3.3.11.

    In 4.0.0-beta.2 we removed --mode and --env. If you feel you'd need that argument back, feel free to leave a feedback here

  3. robertlevy commented on Oct 11, 2020

    @robertlevy

    I'm seeing this issue in the 4.0.0 release

  4. anshumanv commented on Oct 11, 2020

    @anshumanv
    Contributor

    Hi, @robertlevy we've changed the env flag format in v4 because we changed the arg parser, new docs will be released on official site soon. Meanwhile, you can use CLI docs from this deployment - https://vercel.com/webpack-docs/webpack-js-org/e6mjiydwu

  5. robertlevy commented on Oct 11, 2020

    @robertlevy

    @anshumanv thanks but that link is not working for me. could you paste a summary or working example?

  6. anshumanv commented on Oct 11, 2020

    @anshumanv
    Contributor
  7. thealjey-eib commented on Oct 12, 2020

    @thealjey-eib

    @anshumanv
    so, env now only supports boolean values?
    I need to be able to pass arbitrary strings from the command line.

  8. snitin315 commented on Oct 12, 2020

    @snitin315
    Contributor

    but we cannot pass an arbitrary string from the command line?

    @thealjey-eib You can pass any arbitrary string from the command line.

  9. thealjey-eib commented on Oct 12, 2020

    @thealjey-eib

    @snitin315 how?

    it used to be as simple as
    webpack --env.app=foobar --env.title=qwerty
    but, now this throws "Unknown argument" errors

    this creates variables with names app=foobar and title=qwerty, and values true
    webpack --env app=foobar --env title=qwerty

  10. anshumanv commented on Oct 12, 2020

    @anshumanv
    Contributor

    @thealjey-eib for now yes, this is how the behaviour was restored when it was removed.

    You can use

    webpack --env appFoobar --env titleQwerty

    And use these variables to write conditional logic in your config, does it not cover your use case? If not, please give an example.

  11. fabianmarcus commented on Oct 12, 2020

    @fabianmarcus

    @thealjey-eib for now yes, this is how the behaviour was restored when it was removed.

    You can use

    webpack --env appFoobar --env titleQwerty

    And use these variables to write conditional logic in your config, does it not cover your use case? If not, please give an example.

    I am used to do it this way:

    npx webpack --mode production --config webpack.config.build.js --env.name="[staging|production]" --env.service="[login|flight|reservation|...]"

    Now I get
    [webpack-cli] Unknown argument: --env.service=staging
    [webpack-cli] Unknown argument: --env.name=login.

    What's the working equivalent in Webpack CLI 4.x and Webpack 5.x?

    When I change the syntax to your example, the properties in env are just booleans:

    npx webpack --mode production --config webpack.config.build.js --env name="[staging|production]" --env service="[login|flight|reservation|...]"
    
    # Result in env
    { 'service=staging': true, 'name=login': true }

    But that's not what I need.

  12. anshumanv commented on Oct 12, 2020

    @anshumanv
    Contributor

    Thanks for the examples, migration of both config and scripts to use booleans will add a considerable overhead and current format seems not the most verbose thing to work with. I've opened #1932 to track it, will PR soon

    Since we've migrated our arg parser to commander so --env.name="staging" --env.service="login" won't be possible but we can do --env name=staging --env service=login Is that something you can work with?

  13. fabianmarcus commented on Oct 12, 2020

    @fabianmarcus

    Is that something you can work with?

    Yeah, of course. Thanks!

  14. thealjey-eib commented on Oct 12, 2020

    @thealjey-eib

    @anshumanv my example is a multi-application project
    I have an "applications" folder and I want to build any one of them by name.
    Maybe env is not ideal, I do not know, but I have not been able to find a better way to pass custom variables into webpack.config.js
    I cannot hardcode the names of every app in webpack.config.js, and even if I did a boolean value is just not suitable for getting a single value from a list.

  15. 2 remaining items

  16. anshumanv commented on Oct 12, 2020

    @anshumanv
    Contributor

    Ah okay so you have a single config for all applications, then env is the way to go 👍

  17. snitin315 commented on Oct 21, 2020

    @snitin315
    Contributor

    @cranphin see #1939 for new --env format.

  18. ZebraFlesh commented on Dec 15, 2020

    @ZebraFlesh

    This is a breaking change that really needs to be called out as such. In addition, I don't think webpack-cli 4.x can claim compatibility with webpack v4 with this change -- the --env.prod=foo form is explicitly called out in the webpack v4 docs. If there is no desire to undo this change, then the peerDependencies should change.

  19. AsebWebDev commented on Dec 22, 2020

    @AsebWebDev

    So, setting up the enviroment variables like this is the way to go: --env prod=foo - no dot notation.

  20. snitin315 commented on Dec 22, 2020

    @snitin315
    Contributor

    @AsebWebDev yep exactly!

  21. alexander-akait commented on Jun 15, 2022

    @alexander-akait
    Member

    Please open an issue in angular-cli repo

  22. Carles11 commented on Jul 18, 2022

    @Carles11

    (with versions "webpack": "^5.73.0" and "webpack-cli": "^4.10.0")

    This solved the issue for me:

    /package.json -->
    "scripts": {
    "start": "webpack --mode=development && nodemon server",
    "build": "webpack --mode=production && NODE_ENV=production",
    ...
    }

    Hope it helps.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    Priority

    None yet

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions