如何配置生产构建和开发构建 vue-cli

Posted

技术标签:

【中文标题】如何配置生产构建和开发构建 vue-cli【英文标题】:How to configure Production build and Development Build vue-cli 【发布时间】:2019-11-03 09:06:24 【问题描述】:

我想设置一个用于生产构建的 npm 脚本和一个用于开发构建的脚本。比如用于生产的 npm run build 和用于开发的 npm run buildDev。 我在每个 env 文件中都有一些配置,例如:

ROOT_API: '"url for the production"' 以及开发环境中的其他内容。

构建将被添加到 dist 文件夹。 我希望将 Production Build 添加到 dist 文件夹,并将 Development Build 添加到 distDev 文件夹。

我尝试复制 build.js 文件但没有成功。

配置/index.js:

'use strict'

// see http://vuejs-templates.github.io/webpack for documentation.
const path = require('path')

module.exports = 
  build: 
  env: require('./prod.env'),
  index: path.resolve(__dirname, '../dist/index.html'),
  assetsRoot: path.resolve(__dirname, '../dist'),
  assetsSubDirectory: 'static',
  assetsPublicPath: '/',
  productionSourceMap: true,
  // Gzip off by default as many popular static hosts such as
  // Surge or Netlify already gzip all static assets for you.
  // Before setting to `true`, make sure to:
  // npm install --save-dev compression-webpack-plugin
  productionGzip: false,
  productionGzipExtensions: ['js', 'css'],
  // Run the build command with an extra argument to
  // View the bundle analyzer report after build finishes:
  // `npm run build --report`
  // Set to `true` or `false` to always turn it on or off
  bundleAnalyzerReport: process.env.npm_config_report
 ,
 dev: 
  env: require('./dev.env'),
  port: 8080,
  autoOpenBrowser: true,
  assetsSubDirectory: 'static',
  assetsPublicPath: '/',
  proxyTable: ,
  // CSS Sourcemaps off by default because relative paths are 
  "buggy"
  // with this option, according to the CSS-Loader README
  // (https://github.com/webpack/css-loader#sourcemaps)
  // In our experience, they generally work as expected,
  // just be aware of this issue when enabling this option.
  cssSourceMap: false
 

配置/prod.env.js

module.exports = 
  NODE_ENV: '"production"',
  ROOT_API: '"url for production"'

配置/dev.env.js

'use strict'

 const merge = require('webpack-merge')
 const prodEnv = require('./prod.env')

 module.exports = merge(prodEnv, 
   NODE_ENV: '"development"',
   ROOT_API: '"url for development"'
 )

构建/build.js

'use strict'

require('./check-versions')()

process.env.NODE_ENV = 'production'

const ora = require('ora')
const rm = require('rimraf')
const path = require('path')
const chalk = require('chalk')
const webpack = require('webpack')
const config = require('../config')
const webpackConfig = require('./webpack.prod.conf')

const spinner = ora('building for production...')
spinner.start()

rm(path.join(config.build.assetsRoot, 
config.build.assetsSubDirectory), err => 
if (err) throw err
  webpack(webpackConfig, function (err, stats) 
  spinner.stop()
  if (err) throw err
  process.stdout.write(stats.toString(
    colors: true,
    modules: false,
    children: false,
    chunks: false,
    chunkModules: false
  ) + '\n\n')

  console.log(chalk.cyan('  Build complete.\n'))
  console.log(chalk.yellow(
    '  Tip: built files are meant to be served over an HTTP 
    server.\n' +
    '  Opening index.html over file:// won\'t work.\n'
   ))
 )
)

有什么建议吗?

【问题讨论】:

【参考方案1】:

您没有尝试使用vue.config.js 文件来配置Vue 构建行为吗? 您可以根据process.env.NODE_ENVvue.config.js 指定outputDir

所有特定于环境的参数都将在.env.development.env.production 文件中相应地设置。

当然你可以通过vue.config.js修改Webpack配置,如果需要,examples here。

输出目录参数更改示例is here.

最后,你的配置文件将只依赖于环境变量和一些逻辑,例如:

module.exports = 
  NODE_ENV: process.env.NODE_ENV,
  ROOT_API: process.env.VUE_APP_ROOT_API_URL,
  ANY_PARAM: process.env.VUE_APP_ANY_DOT_ENV_PARAM,

但请记住,如果您在模板中使用自定义 .env 参数,则应以 VUE_APP_ 前缀开头。

【讨论】:

【参考方案2】:

在您的 package.json 文件中添加 --mode 开发条目,如下所示:

【讨论】:

或者,如果您不想在 package.json 中提及,也可以使用命令“Yarn build --mode development”或“npm build --mode development”来构建。跨度>

以上是关于如何配置生产构建和开发构建 vue-cli的主要内容,如果未能解决你的问题,请参考以下文章

vue-cli 构建的项目 webpack 如何配置不 build 出 .map 文件?

vue-cli2.x配置build命令构建测试包&正式包

如何使用Xcode的Targets来管理开发和生产版本的构建

vue-cli生成的项目配置开发和生产环境不同的接口

vue cli4.0 配置环境变量

vue-cli构建的项目中build后不产生.map文件的配置方法