Javascript 网页包:独立的生产和开发版本

Javascript 网页包:独立的生产和开发版本,javascript,gruntjs,webpack,build-system,Javascript,Gruntjs,Webpack,Build System,我最近开始评估webpack。在使用grunt之前,我已经习惯了这样一个事实,即我可以使用各种参数启动grunt,以配置构建期间将要发生的事情。例如: grunt watch 将运行调试生成并启用监视任务。而: grunt build 将触发禁用所有开发特定功能的完全最小化的生产构建 我想知道webpack是否有类似的功能,可以让我轻松地在不同的配置之间切换。我已经做了一些研究,但我不喜欢目前为止看到的方法: 我看到一个建议,在调用webpack之前指定NODE_ENV=productio

我最近开始评估webpack。在使用grunt之前,我已经习惯了这样一个事实,即我可以使用各种参数启动grunt,以配置构建期间将要发生的事情。例如:

grunt watch
将运行调试生成并启用监视任务。而:

grunt build
将触发禁用所有开发特定功能的完全最小化的生产构建

我想知道webpack是否有类似的功能,可以让我轻松地在不同的配置之间切换。我已经做了一些研究,但我不喜欢目前为止看到的方法:

  • 我看到一个建议,在调用
    webpack
    之前指定
    NODE_ENV=production
    ,但这不是独立于平台的(例如,在windows上不起作用)
  • 使用
    -p
    开关,但这似乎只会影响最小化
  • 为webpack使用单独的配置文件,但我更喜欢一个不需要维护两个单独文件的解决方案
我知道webpack实际上不是一个任务运行器,比如grunt或gulp,而是一个模块绑定器。但它被推广为咕噜声或咕噜声的替代品


我真正希望看到的是能够使用
webpack watch
之类的工具获得开发构建,并使用
webpack
webpack build
获得生产构建。首先,如果您使用webpack dev server,很容易理解您处于开发模式:

let isDevMode = process.argv[1].endsWith('webpack-dev-server') || process.argv[1].endsWith('webpack-dev-server.js');
第一个条件适用于Linux/mac,第二个条件适用于Windows

然后使用它来配置您的文件

如果您不使用dev server,您可以在运行网页包时传递任何参数,就像使用任何nodejs脚本一样(我用来读取参数,但它只是一个糖,如果您不需要,请不要使用):

然后这样说:

webpack --dev

这实际上是一种非常灵活的方法,可以做很多事情,不仅仅是指定开发模式。我还使用它来指定捆绑包名称等。您唯一需要注意的是避免使用webpack本身提供的参数。

谢谢。我没有意识到我可以如此轻松地访问流程环境,一个快速的
控制台。log(process)
显示,从webpack流程中访问各种各样的东西其实很不错。不过有一个问题,您可能想在我的系统上编写
process.argv[2].endswith('webpack…')
,而
argv[1]
webpack
,而
argv[0]
nodejs
Nope,这正是
argv[1]
因为
网页包
将被
网页包开发服务器
替换,如果您使用网页包开发服务器(它是另一个名称的单独可执行文件)。很高兴看到这个问题。我也在努力解决同样的问题,但却找不到好的文章。
webpack --dev