2016-12-06 106 views
2

我最近开始评估webpack。之前使用过grunt,我习惯于用各种参数来启动grunt来配置在构建过程中将要发生的事情。例如:Webpack:独立生产和开发版本

grunt watch 

将运行调试版本并启用监视任务。虽然:

grunt build 

会触发一个完全最小化生产版本已禁用所有发展的具体功能。

我在想如果webpack有一个类似的功能,可以让我轻松切换不同的配置。我做了一些调查已经但是我不喜欢我到目前为止见过的方法:

  • 我看到了一个建议,呼吁webpack之前指定NODE_ENV=production,但这不是平台的影响无关(例如不工作在Windows上) 。
  • 使用-p开关,但似乎只影响最小化
  • 使用了的WebPack一个单独的配置文件,但我宁愿一个解决方案,我没有保持两个单独的文件。

我明白的WebPack实际上不是一个任务运行,如咕噜一饮而尽,而是模块捆绑。但它正在推广作为替代gruntgulpsee this Medium.com Blog

我真的想看到的是得到一个开发建设的东西,如webpack watch和生产建立与webpackwebpack build的能力是可能的的WebPack

+1

很高兴看到这个问题。我正在努力解决同样的问题,并且无法真正找到好的文章。 –

回答

1

首先,如果你使用的WebPack-dev的-server这是很容易理解你是在开发模式:

let isDevMode = process.argv[1].endsWith('webpack-dev-server') || process.argv[1].endsWith('webpack-dev-server.js'); 

第一种情况是Linux/Mac上,第二个是针对Windows。

然后用它来配置你的文件。

如果你不使用dev的服务器可以同时运行的WebPack,你会使用任何脚本的NodeJS(我用minimist读取参数,但它仅仅是一种糖,如果你不不使用做传递任何参数“T需要):

let argv = require('minimist')(process.argv.slice(2)); 

let isDevMode = argv.dev; // or watch or whatever you want to pass 

,然后调用它的方式:

webpack --dev 

这实际上是在做很多事情,不仅仅是指定开发模式非常灵活的方式。我还使用它来指定包名称等。您需要关心的唯一事情是避免使用webpack自身提供的参数。

+0

谢谢。我并没有意识到自己对流程环境的访问非常简单,一个快速的'console.log(process)'显示它实际上非常适合从webpack进程访问所有类型的东西。其中一个问题,你可能会写'process.argv [2] .endswith('webpack ...'),在我的系统中'argv [1]'是'webpack',而'argv [0]'是'nodejs' – lanoxx

+1

不,它正好是'argv [1]',因为如果你使用webpack dev服务器(它是一个单独的可执行文件和另一个名字),'webpack'将会被'webpack-dev-server'取代。 – smnbbrv