• 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'

    1. # .env.production的配置:
    2. # just a flag
    3. ENV = 'production'
    4. # base api
    5. # VUE_APP_BASE_API = '/prod-api'
    6. VUE_APP_BASE_API = 'http://114.117.4.21:7001/api'
    7. # .env.development的配置:
    8. # just a flag
    9. ENV = 'development'
    10. # base api
    11. # VUE_APP_BASE_API = '/dev-api'
    12. VUE_APP_BASE_API = 'http://192.168.3.100/api'
    1. # .env的配置:
    2. # 主要注意的是,它的作用就是用来做“全局”替换,默认mode为production生产模式:
    3. ENV = 'production'
    4. # 默认覆盖其它的“外部配置文件”的数值:
    5. VUE_APP_BASE_API = 'http://114.117.4.21:7001/api'
    6. # 如果不需要,则不要配置产生文件

    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"的内涵。

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

    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”:

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

            未来,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配置文件在哪

  • 相关阅读:
    cs客户端测试注意点
    Flink Data Source
    Go --- 一个根据IP查询地址的包geoip2
    HashMap底层数据是如何存储的呢?
    Promise从入门到精通(第3章 自定义(手写)Promise)
    【pytorch笔记】第六篇 卷积原理和卷积层
    Map接口和常用方法
    多线程_进程与线程
    【操作系统】进程控制
    zynq开发中的设备树
  • 原文地址:https://blog.csdn.net/pulledup/article/details/127347042