为什么 Vue 源码内获取到的 process.env.NODE_ENV 值总是为 production ?

发布于 2022-09-13 01:09:57 字数 777 浏览 22 评论 0

我的项目是基于 vue-cli 搭建的,在本地开发时通过 npm run serve 启动项目,vue 的所有警告都不弹了。 经过排查,是引入的 vue.runtime.esm.js 源码内获取到的 process.env.NODE_ENV 为 production,所以警告信息都不会弹出,我自定义的 VUE_APP_ 前缀的环境变量也都获取不到,而在项目内可以正常获取所有环境变量。

如果我在 vue.config.js 内配置别名 'vue$': 'vue/dist/vue.esm.js',使用 vue.esm.js 文件,一切就都正常了。控制台输出见下图:
runtime.esm.js 内打印 process.env 为空对象,process.env.NODE_ENV 为prodution
runtime.esm.js

esm.js 内打印 process.env 可见所有环境变量。
esm

vue 官网是这么写的,UMD 版本模式是硬编码好的。esm 版本是用于打包工具的,保留了 NODE_ENV 检测,应该使用打包工具的配置以控制vue运行的模式。然而并没有任何作用,我不知道问题出在哪。
image.png

vue.runtime.esm.js 和 vue.esm.js 都是 ES Module 版本,只差一个编译器,为什么获取的环境变量存在区别呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

眼藏柔 2022-09-20 01:09:57

可能是你的config中把process.env.NODE_ENV 配置为了 production

先说下为什么有的可以获取环境变量有的不可以,因为这就是版本控制的目的,不然要这么多版本干嘛,有开发模式的,有生产模式的,有压缩的,有未压缩的,有PC端的,有移动端的,有服务器渲染的,有客户端渲染的,各司其职。

vue.runtime.esm.js版本使用ES Module模式打包,内部保留了process的引用,也就是说我们可以通过配置来控制代码逻辑

image.png

image.png

vue.runtime.js版本使用umd模式打包,开发环境/生产环境都是硬编码好的,内部是没有process的引用的,也就是说我们没办法在外部通过配置来控制代码逻辑

image.png

image.png



image.png
image.png

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文