zoukankan      html  css  js  c++  java
  • Taro请求域名配置

    Taro请求域名配置

    背景

    使用Taro进行小程序的开发,调用后端api获取信息,开发,测试,正式环境的域名是不同的。最初始的版本中,我们在不同环境中不断修改域名信息。这样造成一个问题,提交审核的时候我们一定要记得将域名改成正式版,不然会出现问题。这种人为控制,显然不能保证百分百没有问题。我们就考虑是不是可以通过process.env来区分不同的环境

    尝试使用process.env解决问题

    修改配置文件

    原配置文件

    export const baseUrl = 'https://release.com/';
    

    修改后配置文件

    let baseUrlPrefix = ''
    const env = process.env.NODE_ENV === 'development' ? 'development' : 'production'
    console.log(process.env.NODE_ENV)
    switch (env) {
        case 'development':
            baseUrlPrefix = 'http://dev.com/'
            break
        case 'production':
            baseUrlPrefix = 'https://release.com/' 
            break
    }
    export const baseUrl = baseUrlPrefix
    

    执行命令查看

    执行命令

    npm run dev:weapp
    

    发现控制台输出的process.env.NODE_ENV=development

    执行命令

    npm run build:weapp
    

    发现控制台输出的process.env.NODE_ENV=production

    执行结果说明一个问题,我们是可以通过process.env进行判断的开发环境和正式环境

    那么我们遗留下来一个问题:测试环境怎么办?

    测试环境怎么设置

    执行npm run dev和build的区别

    查看package.json文件

    "scripts": {
        "build:weapp": "taro build --type weapp",
        "dev:weapp": "npm run build:weapp -- --watch"
     }
    

    可以看出,dev和build的差别就是--watch,那么是不是--watch设置的process.env?

    --watch为什么使process.env=development

    查看源码 taro-build

    program
      .option('--type [typeName]', 'Build type, weapp/swan/alipay/tt/h5/quickapp/rn/qq/jd')
      .option('--watch', 'Watch mode')
      .option('--page [pagePath]', 'Build one page')
      .option('--component [pagePath]', 'Build one component')
      .option('--env [env]', 'Env type')
      .option('--ui', 'Build Taro UI library')
      .option('--ui-index [uiIndexPath]', 'Index file for build Taro UI library')
      .option('--plugin [typeName]', 'Build Taro plugin project, weapp')
      .option('--port [port]', 'Specified port')
      .option('--release', 'Release quickapp')
      .parse(process.argv)
    
    const { type, watch, ui, port, release, page, component, uiIndex } = program
    let { env, plugin } = program
    
    env = process.env.NODE_ENV || env
    
    if (env) {
      process.env.NODE_ENV = env
    } else {
      if (watch) {
        process.env.NODE_ENV = 'development'
      } else {
        process.env.NODE_ENV = 'production'
      }
    }
    

    这里可以看到当env不存在的时候,如果执行参数里面有watch就设置process.env.NODE_ENV = 'development',否则就是'production'。

    到这里你是不是发现了什么端倪?

    端倪

    除了--watch之外,taro执行build命令的时候还接受一个参数--env,设置当前所在环境的,那么我们的测试环境是不是可以通过这个参数设置来实现呢?

    我们来修改一下package.json

    "scripts": {
        "build:weapp": "taro build --type weapp",
        "dev:weapp": "npm run build:weapp -- --watch",
        "test:weapp": "npm run test:weapp -- --watch --env test"
     }
    

    修改配置文件

    let baseUrlPrefix = ''
    const env = process.env.NODE_ENV === 'development' ? 'development' : (process.env.NODE_ENV === 'test' ? 'test' : 'production')
    console.log(process.env.NODE_ENV)
    switch (env) {
        case 'development':
            baseUrlPrefix = 'http://dev.com/'
            break
        case 'test':
            baseUrlPrefix = 'https://test.com/' 
            break
        case 'production':
            baseUrlPrefix = 'https://release.com/' 
            break
    }
    export const baseUrl = baseUrlPrefix
    

    执行命令

    npm run test:weapp
    

    想象一下打印出来的process.env.NODE_ENV是什么?

    发生了什么?

    process.env.NODE_ENV = 'production',为什么?

    我们来看看我们的应用的config文件夹里面的index.js做了什么

    module.exports = function (merge) {
        if (process.env.NODE_ENV === 'development') {
            return merge({}, config, require('./dev'))
        }
        return merge({}, config, require('./prod'))
    }
    

    我们设置的process.env.NODE_ENV应该是test,走到这里webpack的配置文件使用的是prod的配置,我们看看prod.js里面写了什么

    module.exports = {
        env: {
            NODE_ENV: '"production"'
        },
        defineConstants: {
        },
        mini: {},
        h5: {
            /**
             * 如果h5端编译后体积过大,可以使用webpack-bundle-analyzer插件对打包体积进行分析。
             * 参考代码如下:
             * webpackChain (chain) {
             *   chain.plugin('analyzer')
             *     .use(require('webpack-bundle-analyzer').BundleAnalyzerPlugin, [])
             * }
             */
        }
    }
    

    看到了吗,这里把NODE_ENV又重置成了production,我们来尝试调整

    增加test配置

    增加test.js配置在config文件夹中

    module.exports = {
        env: {
            NODE_ENV: '"test"'
        },
        defineConstants: {
        },
        mini: {},
        h5: {}
    }
    

    修改index.js

    module.exports = function (merge) {
        if (process.env.NODE_ENV === 'development') {
            return merge({}, config, require('./dev'))
        } else if (process.env.NODE_ENV === 'test') {
            return merge({}, config, require('./test'))
        }
        return merge({}, config, require('./prod'))
    }
    漫思
  • 相关阅读:
    Dungeon Game 解答
    Gray Code 解答
    N-Queens II 解答
    N-Queens 解答
    Permutation Sequence 解答
    Generate Parentheses 解答
    Letter Combinations of a Phone Number 解答
    Permutations 解答
    Combination Sum II 解答
    134. Gas Station
  • 原文地址:https://www.cnblogs.com/sexintercourse/p/13638602.html
Copyright © 2011-2022 走看看