webpack打包实现多环境接口切换以及cross-env使用

大型项目通常有很多环境,开发环境、测试环境、灰度环境、生产环境等,对于前端来说,不同环境的接口前缀(域名或ip端口)往往是不同的,所以每次切换环境发布代码时,接口的前缀都需要进行修改,在前端趋于自动化的今天,我们可以有两种方式,避免手动修改这些前缀:

  • 方案1:webpack + cross-env
  • 方案2:webpack + 自定义脚手架

cross-env :

这是一款运行跨平台设置和使用环境变量的脚本,在使用cross-env之前,你的scripts脚本大概是:
window系统:

"scripts": {
    "build": "set NODE_ENV=production webpack --config webpack/webpack.build.js"
}

mac系统:

"scripts": {
    "build": "export NODE_ENV=production webpack --config webpack/webpack.build.js"
}

使用cross-env之后,无需关心运行环境问题:

"scripts": {
    "build": "cross-env NODE_ENV=production webpack --config webpack/webpack.build.js"
}

回归正题,通过cross-env设置的NODE_ENV是可以在代码中访问的,因此可以新建多条打包命令,并将NODE_ENV作为不同环境的标记,从而在代码中根据NODE_ENV来使用不同环境的接口前缀

"scripts": {
    "build:test": "cross-env NODE_ENV=test webpack --config webpack/webpack.build.js",
    "build:prod": "cross-env NODE_ENV=production webpack --config webpack/webpack.build.js",
    "start": "cross-env NODE_ENV=development webpack-dev-server --config webpack/webpack.dev.js"
}

自定义脚手架:
假如我们不但要实现NODE_ENV的动态化,还想要在打包的时候向构建过程传入更多的参数呢,例如webpack的output中配置publicPath。
可以封装一个私有cli进行打包的管理,下边是包的入口:

/** 
 * 项目构建
*/
program
    .command('release')
    .alias('rel')
    .description('项目构建')
    .option('--static [url]','静态资源前缀')//url前缀是可选参数
    .action((options)=>{
    //通过options拿到static值,并组织修改webpack配置的publicPath,得到webpackConfig
    //.......
    //创建打包实例
    const compiler = webpack(webpackConfig);
    //进行打包,并设置文字提示和结果提示
    compiler.run(function(err,stats){
    })
    });
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容