使用Vue-cli / webpack / nodenv

关于如何做到这一点,我一直在撞墙。我一直在开发vue-cli应用程序,显然,在节点世界中,我们都相信存在一个开发,一个登台和一个生产环境。

我一直在尽力减少尽可能多的体力劳动,所以我不手动保持文件移动,更改配置等。

我总共有5个环境,但是我需要使用该系统清理3个开发环境,而且我实在无能为力,因此我需要一些指导。

  • 第一开发环境,localhost:12345-我将变量放置在它关闭身份验证并指定url路径的位置。如果将它称为process.env.NODE_ENV的MyLocal,则可以使用env.mylocal的变量。
  • 第二个开发环境,localhost:12345(是相同的)-我在所有身份验证都返回的地方放置了变量,并指定了相同的url路径。如果将它称为process.env.NODE_ENV的DevLocal,那么我可以使用env.devlocal的变量
  • 第3个开发环境,dev.example.com / newAppLoc / web-我在所有验证返回的位置放置了变量,并指定了新的url路径。如果这被称为process.env.NODE_ENV的开发,那么我可以使用env.development的变量

第4和第5分别是演出和制作。

如果我可以选择将自己的环境名称创建为3个以上,则可以避免该问题。因为那时我要做的就是指定要使用的环境,然后运行构建脚本。然后在那一点上,我可以发布我的整个仓库,而不必担心要发送哪个env文件,因为它已经在构建中指定了。

但是由于我只能指定3个,因此我需要帮助来解决这个问题。我不得不担心我的文件被发送,担心一个文件的存在会覆盖另一个配置。我还必须担心我的文件是通过回购协议发送的,其他人可以提取这些文件并覆盖其项目设置。在我看来,整个计划似乎太过客气了,我对这种严格和过度思考的混乱感到非常悲观。但是,我很想知道我可以在3种以上的环境中使用哪种工作流。

此外,我无法覆盖“ development”,“ staging”,“ production”的值。有一些检查可以阻止您将值与其他值进行比较。意思是,在您的webpack.config.js或vue.config.js中,如果您的process.env.NODE_ENV是MyLocal,并且您尝试将其与“ MyLocal”进行比较,则它实际上将变为假。

这是我package.json中包含的脚本

"serve": "vue-cli-service serve","serve:mylocal": "vue-cli-service serve --mode MyLocal","build:mylocal": "vue-cli-service build --mode MyLocal","build:devlocal": vue-cli-service build --mode devlocal","build:dev": "vue-cli-service build --mode development","build:prod": "vue-cli-service build",

所以:

const isDevBuild = process.env.NODE_ENV === "MyLocal";  // false if process.env.NODE_ENV = MyLocal
const isDevBuild = process.env.NODE_ENV === "production"; // true if process.env.NODE_ENV = production

我在想:

  • MyLocal将与.env.local
  • 相同
  • DevLocal将与.env.development.local
  • 开发将与.env.development

但是问题是,您如何指定要使用哪个?它们仅基于存在的优先级,因此更难控制。

exchange456 回答:使用Vue-cli / webpack / nodenv

因此,我放弃了尝试为方案找到工作流的方法,并试图找到一种方法来强行实施我想实现的想法。

因此,vue-cli需要这些模式才能应用process.env.NODE_ENV并找到正确的.env文件。但是,在vue.config.js文件中,process.env.NODE_ENV的值被vue-cli-serve或vue-cli-build命令的默认值覆盖。这就是为什么它能够确定“生产”或“发展”是真实的,而没有其他值的原因,无论您采用哪种方式。

所以我将上面的脚本更改为:

"build:mylocal":  set NODE_ENV=MyLocal && "vue-cli-service build --mode MyLocal","build:devlocal":  set NODE_ENV=DevLocal && vue-cli-service build --mode Devlocal",

这给了我正确的价值观,但仍然行不通。我添加了console.log(process.env.NODE_ENV),它还给我MyLocal了,

console.log(process.env.NODE_ENV === "MyLocal")   // still false!!

那是直到我做了JSON.stringify(process.env.NODE_ENV)并发现结果是“ MyLocal”。看到那个空白吗?现在,在没有引号的控制台上看到该图片。需要用括号括起NODE_ENV集。

最后的解决方案:

"build:MyLocal": "(set NODE_ENV=MyLocal) && vue-cli-service build --mode MyLocal"
"build:DevLocal": "(set NODE_ENV=DevLocal) && vue-cli-service build --mode DevLocal"

这是一个有点棘手的解决方案。您需要显式设置NODE_ENV来覆盖vue.config.js中设置vue-cli的NODE_ENV的机制,并且仍然需要--mode参数来利用vue-cli的选择环境文件的功能。

本文链接:https://www.f2er.com/2580758.html

大家都在问