index.js 2.8 KB
Newer Older
fxy060608's avatar
fxy060608 已提交
1 2
const path = require('path')

fxy060608's avatar
fxy060608 已提交
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
const {
  manifestPlatformOptions
} = require('./lib/env')

const {
  assetsDir
} = require('./lib/copy-webpack-options')

require('./lib/check-update')()

const initBuildCommand = require('./commands/build')
const initServeCommand = require('./commands/serve')

module.exports = (api, options) => {
  initServeCommand(api, options)

  initBuildCommand(api, options)

fxy060608's avatar
fxy060608 已提交
21
  if (process.env.UNI_PLATFORM === 'quickapp-native') {
fxy060608's avatar
fxy060608 已提交
22
    process.env.UNI_OUTPUT_DIR = path.resolve(process.env.UNI_OUTPUT_DIR, 'build')
fxy060608's avatar
fxy060608 已提交
23
    Object.assign(options, {
fxy060608's avatar
fxy060608 已提交
24
      assetsDir,
fxy060608's avatar
fxy060608 已提交
25
      parallel: false,
fxy060608's avatar
fxy060608 已提交
26
      outputDir: process.env.UNI_OUTPUT_DIR
fxy060608's avatar
fxy060608 已提交
27 28
    })
    require('./lib/options')(options)
fxy060608's avatar
fxy060608 已提交
29 30 31 32 33 34 35 36
    const platformOptions = {
      webpackConfig: {},
      chainWebpack () {}
    }
    const manifestPlatformOptions = {}
    api.configureWebpack(require('./lib/configure-webpack')(platformOptions, manifestPlatformOptions, options, api))
    api.chainWebpack(require('./lib/chain-webpack')(platformOptions, options, api))

fxy060608's avatar
fxy060608 已提交
37
    const vueConfig = require('@dcloudio/uni-quickapp-native/lib/vue.config.js')
fxy060608's avatar
fxy060608 已提交
38 39 40 41 42
    api.configureWebpack(vueConfig.configureWebpack)
    api.chainWebpack(vueConfig.chainWebpack)
    return
  }

fxy060608's avatar
fxy060608 已提交
43 44 45 46 47
  const type = ['app-plus', 'h5'].includes(process.env.UNI_PLATFORM)
    ? process.env.UNI_PLATFORM
    : 'mp'

  const platformOptions = require('./lib/' + type)
fxy060608's avatar
fxy060608 已提交
48 49 50 51 52 53

  let vueConfig = platformOptions.vueConfig

  if (typeof vueConfig === 'function') {
    vueConfig = vueConfig(options, api)
  }
fxy060608's avatar
fxy060608 已提交
54

fxy060608's avatar
fxy060608 已提交
55 56 57 58 59 60 61
  if (options.pages) {
    // h5平台 允许 vue.config.js pages 覆盖,其他平台移除 pages 配置
    if (process.env.UNI_PLATFORM === 'h5') {
      delete vueConfig.pages
    } else {
      delete options.pages
    }
fxy060608's avatar
fxy060608 已提交
62 63
  }

fxy060608's avatar
fxy060608 已提交
64
  Object.assign(options, { // TODO 考虑非 HBuilderX 运行时,可以支持自定义输出目录
fxy060608's avatar
fxy060608 已提交
65 66
    outputDir: process.env.UNI_OUTPUT_TMP_DIR || process.env.UNI_OUTPUT_DIR,
    assetsDir
67
  }, vueConfig) // 注意,此处目前是覆盖关系,后续考虑改为webpack merge逻辑
fxy060608's avatar
fxy060608 已提交
68 69 70

  require('./lib/options')(options)

fxy060608's avatar
fxy060608 已提交
71
  api.configureWebpack(require('./lib/configure-webpack')(platformOptions, manifestPlatformOptions, options, api))
fxy060608's avatar
fxy060608 已提交
72
  api.chainWebpack(require('./lib/chain-webpack')(platformOptions, options, api))
fxy060608's avatar
fxy060608 已提交
73

fxy060608's avatar
fxy060608 已提交
74
  global.uniPlugin.configureWebpack.forEach(configureWebpack => {
fxy060608's avatar
fxy060608 已提交
75 76 77
    api.configureWebpack(function (webpackConfig) {
      return configureWebpack(webpackConfig, options)
    })
fxy060608's avatar
fxy060608 已提交
78 79
  })
  global.uniPlugin.chainWebpack.forEach(chainWebpack => {
fxy060608's avatar
fxy060608 已提交
80 81 82
    api.chainWebpack(function (webpackConfig) {
      return chainWebpack(webpackConfig, options)
    })
fxy060608's avatar
fxy060608 已提交
83
  })
fxy060608's avatar
fxy060608 已提交
84 85
}

86 87
const args = require('minimist')(process.argv.slice(2))

fxy060608's avatar
fxy060608 已提交
88
module.exports.defaultModes = {
89 90 91
  'uni-serve': args.mode || 'development',
  'uni-build':  args.mode || process.env.NODE_ENV
}