当前位置: 首页 > news >正文

process.env.NODE_ENV与@vue/cli-service及其.env.*默认外部环境配置文件之跨域部署

process.env.NODE_ENV与@vue/cli-service及其.env.*默认外部环境配置文件之跨域部署

目录

process.env.NODE_ENV与@vue/cli-service及其.env.*默认外部环境配置文件之间的关系

一、前言

二、详述

2.1、.env.*外部环境文件的用途

2.2、.env.*外部环境文件的配置

2.3、 package.json包管理文件的script脚本在做什么

2.4、vue-cli-service.js及Service.js中引用的进程环境process.env

喜欢的,就收藏并点个赞,鼓励我继续技术的原创写作及经验分享:


一、前言

        vue-cli + webpack项目,内置了process.env.NODE_ENV环境指针数组(对象),用以识别其内置的webpack打包“模式”mode。

        @vue/cli-service的脚本代码,在package.json的"scripts"指令对象,可对该打包“模式”mode进行配置,使得运行时,与打包“模式”mode相匹配。

        与上述相对应的是,支持与此规则相对应的外部文件命名规则.env.*,分别为:

.env.development,代表“开发环境”(vue的默认值)

.env.production,代表“生产环境”(webpack默认的,vue该写了默认值为“开发环境”)

.env.inspect,代表“开发环境”

.env.其它自定义,代表debug“调试模式”

.env,全局,一旦配置了它,即覆盖所有,默认为“production生产环境”

二、详述

2.1、.env.*外部环境文件的用途

        如果运行环境,前端站点的web服务、后端服务,它们之间,sameOrigin同域(即不存在“跨域”情况),这个.env.*外部环境文件就显得作用不大,前端站点与后端服务之间。可以通过“vue-router”路由插件及axios等http库,即可完成。

        但是,前端站点与后端服务之间,一旦存在“跨域”情形,.env.*外部环境文件就显得非常“灵活”和“有用”。

比如生产环境:

        后端:http://114.117.4.21:7001或http://114.117.3.24:8080或https://114.117.4.21:8080

        前端:http://114.117.4.21:8080

再比如开发环境:

        后端:http://192.168.3.100

        前端:http://192.168.3.242

        有了.env.*外部环境文件,能在“打包环节”和“运行时”,让分析器或浏览器等执行环境,识别前端“模式mode”对应的后端API:

2.2、.env.*外部环境文件的配置

        默认将它们存取于“项目”根路径:

图1 

# .env.production的配置:
# just a flag
ENV = 'production'

# base api
# VUE_APP_BASE_API = '/prod-api'
VUE_APP_BASE_API = 'http://114.117.4.21:7001/api'


# .env.development的配置:
# just a flag
ENV = 'development'

# base api
# VUE_APP_BASE_API = '/dev-api'
VUE_APP_BASE_API = 'http://192.168.3.100/api'

# .env.production的配置:
# just a flag
ENV = 'production'

# base api
# VUE_APP_BASE_API = '/prod-api'
VUE_APP_BASE_API = 'http://114.117.4.21:7001/api'


# .env.development的配置:
# just a flag
ENV = 'development'

# base api
# VUE_APP_BASE_API = '/dev-api'
VUE_APP_BASE_API = 'http://192.168.3.100/api'
# .env的配置:
# 主要注意的是,它的作用就是用来做“全局”替换,默认mode为production生产模式:
ENV = 'production'

# 默认覆盖其它的“外部配置文件”的数值:
VUE_APP_BASE_API = 'http://114.117.4.21:7001/api'

# 如果不需要,则不要配置产生文件

2.3、 package.json包管理文件的script脚本在做什么

    "scripts": {

        "dev": "vue-cli-service serve",

        "build:prod": "vue-cli-service build --mode production",

        "build:stage": "vue-cli-service build --mode staging",

        "preview": "node build/index.js --preview",

        "svgo": "svgo -f src/icons/svg --config=src/icons/svgo.yml",

        "lint": "eslint --ext .js,.vue src",

        "test:unit": "jest --clearCache && vue-cli-service test:unit",

        "test:ci": "npm run lint && npm run test:unit"

    },

        以MsWindows举例说明如下,在你的项目根路径下,一旦npm install了 package.json中配置的相关库或模块,在项目根下降产生node_modules文件夹,其中:.\bin存放下载安装的各个“库或模块”的包的“解压缩”文件夹及node.js默认的二进制可执行子进程目录,各包目录就是其对应“库或模块”的js代码。

运行:npm run dev

就是通过npm包管理器,调用你安装的node.exe主进程;它在后台去调用vue的子进程代码bin/vue-cli-service.js,路径为:@vue/cli-service;执行参数为serve,路径为:lib/Service.js

这就是 "dev": "vue-cli-service serve"的内涵。

# main.js
# 
console.log(
    `这个process.env.VUE_CLI_MODE是@vue/cli-service内部的打印不出来,
其位置在node_modules/@vue/cli-service/lib/Service.js中,
初始化方法Service.init (mode = process.env.VUE_CLI_MODE)进行设置的;
node_modules/@vue/cli-service/package.json包管理文件设定了vue-cli-service源代码文件的具体指向:
node_modules/@vue/cli-service/bin/vue-cli-service.js"vue-cli-service": "bin/vue-cli-service.js
在vue-cli-service.js中,process.argv.slice(2)指定了node主进程的该子进程的所带的参数3个:
分别为:build、serve、inspect,它们涵盖的代码作用域分别代表了打包和执行的3种具体"mode"模式,其可选参数分别为:
    // build
    'modern',
    'report',
    'report-json',
    'inline-vue',
    'watch',
    // serve
    'open',
    'copy',
    'https',
    // inspect
    'verbose'
    比如vue-cli-service build --modern
同时,vue内部,默认了其内置webpack的打包时的外部环境文件.env.***,用以在打包后让不同运行时环境,
来识别vue的app的后端服务api的指向: "domainOrIp:port/PathOfAPI"的全路径(注意尾部不要带"/"):VUE_APP_BASE_API :
比如: .env.development中,配置开发时的VUE_APP_BASE_API = 'http://192.168.3.100/api' ,环境为ENV = 'development' ,
而在生产环境.env.production,配置生产运行时的VUE_APP_BASE_API = 'http://114.117.4.21:7001/api' ,环境为ENV = 'production' ,
`);

2.4、vue-cli-service.js及Service.js中引用的进程环境process.env

node_modules/@vue/cli-service/bin/vue-cli-service.js

node_modules/@vue/cli-service/lib/Service.js

        process.env,返回一个环境对象(指针数组),如“图1”:

# 浏览器中,全局属性process.env : 
{
    "NODE_ENV": "production",
    "VUE_APP_BASE_API": "http://114.117.4.21:7001/api",
    "BASE_URL": "/admin/"
}

        未来,node进程process模块只导出string、number、boolean类型,不再导出类似env的对象,否则会抛异常。

        除非在创建Worker实例时明确指定,否则每个Worker线程都有自己的进程副本。env,基于其父线程的进程。env或任何指定为Worker构造函数的env选项的内容。改变进程,env在Worker线程中不可见,只有主线程可以进行对操作系统或本机加载项的更改可见。

喜欢的,就收藏并点个赞,鼓励我继续技术的原创写作及经验分享:

Linux部署node.JS、NginX、egg、MongoDB和非js世界的后端服务之CentOS-腾讯云_pulledup的博客-CSDN博客

MSWindows安装部署mongoDB_pulledup的博客-CSDN博客

vue和webpack所依赖的node.js进程信息process及环境变量process.env_pulledup的博客-CSDN博客

影响WebPack部署的常见因素及解决办法_pulledup的博客-CSDN博客_webpack部署

vscode用户配置文件等的存取_pulledup的博客-CSDN博客_vscode配置文件在哪

相关文章:

  • MySQL:用户权限和语言接口
  • 2022年广西壮族自治区中职网络安全技能竞赛“Linux操作系统渗透测试详解”
  • 沉睡者 - 抖音中视频计划横版16:9视频制作教程
  • 强大的包管理器Poetry
  • MFC Windows 程序设计[304]之文件夹的枚举(附源码)
  • 【ArcGIS微课1000例】0033:地图点状标记符号设计教程
  • 神经网络中的算法-BN算法
  • SpringBoot接收参数的几种常用方式
  • Linux--权限
  • ESP32上手指南
  • 多径信道下通过LMS均衡算法提高通信质量——详细版
  • 前端笔试/面试题
  • 基于C51语音控制小车
  • 算法优化 | MATLAB实现BO-RF贝叶斯优化随机森林算法
  • C# 中的多线程
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • JavaScript HTML DOM
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • js数组之filter
  • Linux后台研发超实用命令总结
  • Redis在Web项目中的应用与实践
  • Webpack 4x 之路 ( 四 )
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 基于遗传算法的优化问题求解
  • 爬虫模拟登陆 SegmentFault
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 译有关态射的一切
  • 最简单的无缝轮播
  • 数据库巡检项
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (转)德国人的记事本
  • .axf 转化 .bin文件 的方法
  • .md即markdown文件的基本常用编写语法
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .NET Core WebAPI中封装Swagger配置
  • .NET DataGridView数据绑定说明
  • .NET Windows:删除文件夹后立即判断,有可能依然存在
  • .NET开发人员必知的八个网站
  • .NET上SQLite的连接
  • .NET中的十进制浮点类型,徐汇区网站设计
  • @RequestMapping-占位符映射
  • [20180224]expdp query 写法问题.txt
  • [AX]AX2012 R2 出差申请和支出报告
  • [bzoj4240] 有趣的家庭菜园
  • [CareerCup] 2.1 Remove Duplicates from Unsorted List 移除无序链表中的重复项
  • [CF407E]k-d-sequence
  • [cogs2652]秘术「天文密葬法」