options.js 3.5 KB
Newer Older
fxy060608's avatar
fxy060608 已提交
1 2
const fs = require('fs')
const path = require('path')
3
const webpack = require('webpack')
Q
qiang 已提交
4 5 6
const {
  pathToRegexp
} = require('@dcloudio/uni-cli-shared/lib/util')
fxy060608's avatar
fxy060608 已提交
7

fxy060608's avatar
fxy060608 已提交
8 9 10 11 12 13 14 15 16 17 18
module.exports = function initOptions (options) {
  const {
    getPlatformScss,
    getPlatformSass
  } = require('@dcloudio/uni-cli-shared')

  if (!options.transpileDependencies) {
    options.transpileDependencies = []
  }

  // 增加 src/node_modules 解析
Q
qiang 已提交
19
  options.transpileDependencies.push(pathToRegexp(path.resolve(process.env.UNI_INPUT_DIR, 'node_modules'), { start: true }))
20
  options.transpileDependencies.push('@dcloudio/uni-' + process.env.UNI_PLATFORM)
雪洛's avatar
雪洛 已提交
21
  options.transpileDependencies.push('@dcloudio/uni-i18n')
22
  options.transpileDependencies.push('@dcloudio/uni-stat')
fxy060608's avatar
fxy060608 已提交
23
  options.transpileDependencies.push('@dcloudio/uni-push')
fxy060608's avatar
fxy060608 已提交
24
  options.transpileDependencies.push('@dcloudio/vue-cli-plugin-uni/packages/uni-app')
fxy060608's avatar
fxy060608 已提交
25
  options.transpileDependencies.push('@dcloudio/vue-cli-plugin-uni/packages/uni-cloud')
26
  options.transpileDependencies.push('@dcloudio/vue-cli-plugin-uni/packages/uni-stat')
fxy060608's avatar
fxy060608 已提交
27
  options.transpileDependencies.push('@dcloudio/vue-cli-plugin-uni/packages/uni-push')
fxy060608's avatar
fxy060608 已提交
28 29 30 31

  if (process.env.UNI_PLATFORM !== 'mp-weixin') { // mp runtime
    options.transpileDependencies.push('@dcloudio/uni-mp-weixin')
  }
fxy060608's avatar
fxy060608 已提交
32 33 34 35 36 37 38 39 40 41

  if (process.env.UNI_PLATFORM === 'h5') { // h5 dev 用到了这两个,需要 babel
    options.transpileDependencies.push('ansi-regex')
    options.transpileDependencies.push('strip-ansi')
  }

  if (!options.css) {
    options.css = {}
  }

fxy060608's avatar
init v3  
fxy060608 已提交
42
  if (process.env.UNI_PLATFORM === 'h5' || process.env.UNI_USING_V3) {
fxy060608's avatar
fxy060608 已提交
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
    options.css.extract = false
  } else {
    options.css.extract = true
  }

  if (!options.css.loaderOptions) {
    options.css.loaderOptions = {}
  }
  if (!options.css.loaderOptions.postcss) {
    options.css.loaderOptions.postcss = {}
  }
  if (!options.css.loaderOptions.sass) {
    options.css.loaderOptions.sass = {}
  }

58 59 60 61 62 63 64 65
  if (webpack.version[0] > 4) {
    if (!options.css.loaderOptions.postcss.postcssOptions) {
      options.css.loaderOptions.postcss.postcssOptions = {}
    }
  } else {
    if (!options.css.loaderOptions.postcss.config) {
      options.css.loaderOptions.postcss.config = {}
    }
fxy060608's avatar
fxy060608 已提交
66 67 68 69 70 71 72 73
  }

  // sass 全局变量
  const isSass = fs.existsSync(path.resolve(process.env.UNI_INPUT_DIR, 'uni.sass'))
  const isScss = fs.existsSync(path.resolve(process.env.UNI_INPUT_DIR, 'uni.scss'))
  let sassData = isSass ? getPlatformSass() : getPlatformScss()

  if (isSass) {
fxy060608's avatar
fxy060608 已提交
74
    sassData = '@import "@/uni.sass"'
fxy060608's avatar
fxy060608 已提交
75 76 77 78
  } else if (isScss) {
    sassData = `${sassData}
  @import "@/uni.scss";`
  }
79 80 81 82

  if (!options.css.loaderOptions.sass.sassOptions) {
    options.css.loaderOptions.sass.sassOptions = {}
  }
83
  // 指定 outputStyle, 否则 production 模式下会被默认成 compressed
84 85 86 87
  const outputStyle = options.css.loaderOptions.sass.sassOptions.outputStyle
  if (!outputStyle || outputStyle === 'compressed') {
    options.css.loaderOptions.sass.sassOptions.outputStyle = 'expanded'
  }
fxy060608's avatar
fxy060608 已提交
88
  options.css.loaderOptions.sass.prependData = sassData
fxy060608's avatar
fxy060608 已提交
89
  const userPostcssConfigPath = path.resolve(process.env.UNI_INPUT_DIR, 'postcss.config.js')
90 91 92
  const configPath = fs.existsSync(userPostcssConfigPath) ? userPostcssConfigPath : path.resolve(process.env.UNI_CLI_CONTEXT, 'postcss.config.js')
  if (webpack.version[0] > 4) {
    options.css.loaderOptions.postcss.postcssOptions.config = configPath
fxy060608's avatar
fxy060608 已提交
93
  } else {
94
    options.css.loaderOptions.postcss.config.path = configPath
fxy060608's avatar
fxy060608 已提交
95
  }
96
}