前言
这是面试官经常会问到的一个话题,你是怎么区分生产环境和开发环境的,如果你思考过并了解过如何实现,那么你就可以清晰地回答出来。他问你这个目的是什么?你一定要清楚,他是在看你有没有去翻阅过webpack的文档,有没有过自己的思考。
主题
先思考,module.exports可以导出一个对象,那么我们运行打包的命令的时候可以通过在命令里指定去执行对应的配置文件,这里不展开演示这种方式,是不是还有别的方式?好,我们先来到官方文档:
Besides exporting a single configuration object, there are a few more ways that cover other needs as well.
这句话get到一个关键信息,我们除了导出一个对象的配置以外,还提供了很多种别的方式。
Eventually you will find the need to disambiguate in your
webpack.config.jsbetween development and production builds. There are multiple ways to do that. One option is to export a function from your webpack configuration instead of exporting an object. The function will be invoked with two arguments
这句话我们又get到另一个关键信息,通过导出一个函数的方式来实现区分开发和生产环境。
看看示例吧先:
ok,搜集好了关键信息,我们该动手实际操作了:
来先打印下一这个env吧:
执行打包:
虽然打印了,但是这样我们依然没有能够区分的标志,继续看文档:
ok,又拿到关键信息,当我们导出一个函数,环境要通过这种方式传递给我们的参数,操作:
分别执行开发和生产命令,看打印结果:
一切都准备好了,剩下就是写if else了,那么这个流程你也就清楚了。这个问题复杂吗,不复杂,考察的是你对于平时工作中用到的一些打包工具也好,框架也好,有没有过自己的思考,为什么脚手架这样用,不是别人写一个object你就copy一个object一个过来,别人写一个function你就copy一个function过来,你一定要有自己的思考,这样你在与别人交流起来才能用自己的语言去组织。
尾声
你说实际开发中,多少人会去关注这个如何区分环境的配置,往往要么是脚手架给你做好了,要么是架构师给你搭好架子了,你就搁那儿闷头写业务就行了,真行吗?你为自己想过出路吗,一年经验当做十年经验用可以吗?不怕能耐差,就怕见识穷,你应该多思考,多了解,而不是只盯着眼前的一亩三分地。摆烂很容易,思考很难,话虽难听,但请共勉。