env.js 18.9 KB
Newer Older
fxy060608's avatar
fxy060608 已提交
1
const fs = require('fs')
fxy060608's avatar
fxy060608 已提交
2
const path = require('path')
fxy060608's avatar
fxy060608 已提交
3
const mkdirp = require('mkdirp')
4
const loaderUtils = require('loader-utils')
d-u-a's avatar
d-u-a 已提交
5
const uniI18n = require('@dcloudio/uni-cli-i18n')
fxy060608's avatar
fxy060608 已提交
6
const moduleAlias = require('module-alias')
fxy060608's avatar
fxy060608 已提交
7 8

require('./error-reporting')
D
DCloud_LXH 已提交
9
require('../util/console')
fxy060608's avatar
fxy060608 已提交
10

11 12
const hasOwnProperty = Object.prototype.hasOwnProperty

Q
qiang 已提交
13
function hasOwn (obj, key) {
14 15 16
  return hasOwnProperty.call(obj, key)
}

fxy060608's avatar
fxy060608 已提交
17 18 19 20 21 22
const defaultInputDir = 'src'
if (process.env.UNI_INPUT_DIR && process.env.UNI_INPUT_DIR.indexOf('./') === 0) {
  process.env.UNI_INPUT_DIR = path.resolve(process.cwd(), process.env.UNI_INPUT_DIR)
}
process.env.UNI_INPUT_DIR = process.env.UNI_INPUT_DIR || path.resolve(process.cwd(), defaultInputDir)

fxy060608's avatar
fxy060608 已提交
23
const {
fxy060608's avatar
fxy060608 已提交
24 25
  getManifestJson,
  isEnableUniPushV1,
fxy060608's avatar
fxy060608 已提交
26 27 28 29 30
  isEnableUniPushV2,
  isUniPushOffline
} = require('@dcloudio/uni-cli-shared/lib/manifest')

const manifestJsonObj = getManifestJson()
fxy060608's avatar
fxy060608 已提交
31

32
process.env.UNI_APP_ID = manifestJsonObj.appid || ''
Q
qiang 已提交
33
process.env.UNI_APP_NAME = manifestJsonObj.name || ''
34
process.env.UNI_PLATFORM = process.env.UNI_PLATFORM || 'h5'
D
DCloud_LXH 已提交
35 36
process.env.UNI_APP_VERSION_NAME = manifestJsonObj.versionName
process.env.UNI_APP_VERSION_CODE = manifestJsonObj.versionCode
37

fxy060608's avatar
fxy060608 已提交
38 39 40 41 42 43
// 小程序 vue3 标记
if (process.env.UNI_PLATFORM.indexOf('mp-') === 0) {
  if (manifestJsonObj.vueVersion === '3' || manifestJsonObj.vueVersion === 3) {
    process.env.UNI_USING_VUE3 = true
    process.env.UNI_USING_VUE3_OPTIONS_API = true
  }
fxy060608's avatar
fxy060608 已提交
44
}
fxy060608's avatar
fxy060608 已提交
45 46 47 48 49 50
// v2 uni-push
if (isEnableUniPushV2(manifestJsonObj, process.env.UNI_PLATFORM)) {
  process.env.UNI_PUSH_V2 = true
  if (process.env.UNI_PLATFORM === 'app-plus' && isUniPushOffline(manifestJsonObj)) {
    process.env.UNI_PUSH_V2_OFFLINE = true
  }
fxy060608's avatar
fxy060608 已提交
51 52
} else if (isEnableUniPushV1(manifestJsonObj, process.env.UNI_PLATFORM)) {
  process.env.UNI_PUSH_V1 = true
fxy060608's avatar
fxy060608 已提交
53
}
fxy060608's avatar
fxy060608 已提交
54 55 56

// 初始化全局插件对象
global.uniPlugin = require('@dcloudio/uni-cli-shared/lib/plugin').init()
fxy060608's avatar
fxy060608 已提交
57

fxy060608's avatar
fxy060608 已提交
58 59 60 61 62 63
const platformOptions = manifestJsonObj[process.env.UNI_SUB_PLATFORM || process.env.UNI_PLATFORM] || {}
// 插件校验环境
global.uniPlugin.validate.forEach(validate => {
  validate(platformOptions, manifestJsonObj)
})
process.UNI_MANIFEST = manifestJsonObj
fxy060608's avatar
fxy060608 已提交
64

fxy060608's avatar
fxy060608 已提交
65 66
process.env.VUE_APP_NAME = manifestJsonObj.name

fxy060608's avatar
fxy060608 已提交
67
process.env.UNI_USING_V3_SCOPED = true
fxy060608's avatar
fxy060608 已提交
68

69
process.env.UNI_CLOUD_PROVIDER = JSON.stringify([])
fxy060608's avatar
fxy060608 已提交
70

71
// 导出到小程序插件
fxy060608's avatar
fxy060608 已提交
72 73
process.env.UNI_MP_PLUGIN_EXPORT = JSON.stringify(Object.keys(platformOptions.plugins || {}).map(pluginName =>
  platformOptions.plugins[pluginName].export))
74

75 76 77
const isH5 = !process.env.UNI_SUB_PLATFORM && process.env.UNI_PLATFORM === 'h5'
const isProduction = process.env.NODE_ENV === 'production'

fxy060608's avatar
fxy060608 已提交
78 79 80
if (process.env.UNI_CLOUD_SPACES) {
  try {
    const spaces = JSON.parse(process.env.UNI_CLOUD_SPACES)
fxy060608's avatar
fxy060608 已提交
81
    if (Array.isArray(spaces)) {
82
      const hasUniCloudSpace = spaces.length > 0
fxy060608's avatar
fxy060608 已提交
83
      if (spaces.length === 1) {
fxy060608's avatar
fxy060608 已提交
84
        const space = spaces[0]
fxy060608's avatar
fxy060608 已提交
85 86 87
        console.log(uniI18n.__('pluginUni.currentProjectDefaultSpaceId', {
          0: space.id
        }))
fxy060608's avatar
fxy060608 已提交
88
      }
89 90 91 92 93 94

      if (
        hasUniCloudSpace &&
        isH5 &&
        isProduction
      ) {
fxy060608's avatar
fxy060608 已提交
95
        console.warn(uniI18n.__('pluginUni.unicloudReleaseH5', {
雪洛's avatar
雪洛 已提交
96
          0: 'https://uniapp.dcloud.net.cn/uniCloud/publish.html#useinh5'
fxy060608's avatar
fxy060608 已提交
97
        }))
98 99 100 101 102
      } else if (
        hasUniCloudSpace &&
        isH5 &&
        !isProduction
      ) {
fxy060608's avatar
fxy060608 已提交
103
        console.warn(uniI18n.__('pluginUni.unicloudShowedRunByHBuilderX', {
雪洛's avatar
雪洛 已提交
104
          0: 'https://uniapp.dcloud.net.cn/uniCloud/publish.html#useinh5'
fxy060608's avatar
fxy060608 已提交
105
        }))
106 107
      }

fxy060608's avatar
fxy060608 已提交
108
      process.env.UNI_CLOUD_PROVIDER = JSON.stringify(spaces.map(space => {
109 110 111
        if (space.provider === 'tcb') {
          space.provider = 'tencent'
        }
fxy060608's avatar
fxy060608 已提交
112 113
        if (space.clientSecret) {
          return {
114
            provider: space.provider || 'aliyun',
fxy060608's avatar
fxy060608 已提交
115 116 117 118 119 120 121
            spaceName: space.name,
            spaceId: space.id,
            clientSecret: space.clientSecret,
            endpoint: space.apiEndpoint
          }
        } else {
          return {
122
            provider: space.provider || 'tencent',
fxy060608's avatar
fxy060608 已提交
123 124 125 126
            spaceName: space.name,
            spaceId: space.id
          }
        }
127
      }))
fxy060608's avatar
fxy060608 已提交
128 129
    }
  } catch (e) {}
fxy060608's avatar
fxy060608 已提交
130
}
fxy060608's avatar
fxy060608 已提交
131

fxy060608's avatar
fxy060608 已提交
132
// 初始化环境变量
Q
qiang 已提交
133 134 135
process.env.UNI_CLI_CONTEXT = require('@dcloudio/uni-cli-shared/lib/util').getCLIContext()

const defaultOutputDir = './dist/' +
fxy060608's avatar
fxy060608 已提交
136
  (process.env.NODE_ENV === 'production' ? 'build' : 'dev') + '/' +
fxy060608's avatar
fxy060608 已提交
137
  (process.env.UNI_SUB_PLATFORM || process.env.UNI_PLATFORM)
138

Q
qiang 已提交
139
process.env.UNI_OUTPUT_DEFAULT_DIR = path.resolve(process.env.UNI_CLI_CONTEXT, defaultOutputDir)
fxy060608's avatar
fxy060608 已提交
140 141 142 143 144 145
if (process.env.UNI_OUTPUT_DIR && process.env.UNI_OUTPUT_DIR.indexOf('./') === 0) {
  process.env.UNI_OUTPUT_DIR = path.resolve(process.cwd(), process.env.UNI_OUTPUT_DIR)
}

process.env.UNI_PLATFORM = process.env.UNI_PLATFORM || 'h5'
process.env.VUE_APP_PLATFORM = process.env.UNI_PLATFORM
146
process.env.UNI_OUTPUT_DIR = process.env.UNI_OUTPUT_DIR || process.env.UNI_OUTPUT_DEFAULT_DIR
fxy060608's avatar
fxy060608 已提交
147 148 149 150 151 152 153

if (process.env.UNI_PLATFORM === 'app-plus') {
  process.env.UNI_OUTPUT_TMP_DIR = path.resolve(process.env.UNI_OUTPUT_DIR, '../.tmp/app-plus')
}

process.UNI_LIBRARIES = process.UNI_LIBRARIES || ['@dcloudio/uni-ui']

fxy060608's avatar
fxy060608 已提交
154
if (process.env.NODE_ENV === 'production') { // 发行模式,不启用 cache
155
  delete process.env.UNI_USING_CACHE
fxy060608's avatar
fxy060608 已提交
156 157
}

fxy060608's avatar
fxy060608 已提交
158 159 160 161 162 163
process.env.BROWSERSLIST_CONFIG = [
  path.resolve(process.env.UNI_INPUT_DIR, '.browserslistrc'),
  path.resolve(process.env.UNI_CLI_CONTEXT, 'package.json'),
  path.resolve(process.cwd(), 'package.json')
].find(file => fs.existsSync(file))

fxy060608's avatar
fxy060608 已提交
164
const {
fxy060608's avatar
fxy060608 已提交
165
  normalizePath,
fxy060608's avatar
fxy060608 已提交
166 167
  isSupportSubPackages,
  runByHBuilderX,
fxy060608's avatar
fxy060608 已提交
168
  getPagesJson
169 170 171
} = require('@dcloudio/uni-cli-shared')

process.env.RUN_BY_HBUILDERX = JSON.stringify(runByHBuilderX)
172 173 174 175 176 177

const {
  initUniModules
} = require('@dcloudio/uni-cli-shared/lib/uni_modules')

initUniModules()
fxy060608's avatar
fxy060608 已提交
178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198

const pagesJsonObj = getPagesJson()
// 读取分包
process.UNI_SUBPACKAGES = {}
if (Array.isArray(pagesJsonObj.subPackages)) {
  pagesJsonObj.subPackages.forEach(subPackage => {
    if (subPackage && subPackage.root) {
      const {
        name,
        root,
        independent
      } = subPackage
      process.UNI_SUBPACKAGES[root] = {
        name,
        root,
        independent
      }
    }
  })
}

fxy060608's avatar
fxy060608 已提交
199 200
process.UNI_PAGES = pagesJsonObj

fxy060608's avatar
fxy060608 已提交
201 202 203 204 205 206 207 208
if (manifestJsonObj.debug) {
  process.env.VUE_APP_DEBUG = true
}

process.UNI_STAT_CONFIG = {
  appid: manifestJsonObj.appid
}

209 210
// 默认启用 自定义组件模式
// if (isInHBuilderXAlpha) {
211
let usingComponentsAbsent = false
212
if (!hasOwn(platformOptions, 'usingComponents')) {
213
  usingComponentsAbsent = true
214
}
fxy060608's avatar
fxy060608 已提交
215
platformOptions.usingComponents = true
216
// }
fxy060608's avatar
fxy060608 已提交
217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246

if (process.env.UNI_PLATFORM === 'h5') {
  const optimization = platformOptions.optimization
  if (optimization) {
    // 发行模式且主动启用优化
    const treeShaking = optimization.treeShaking
    if (
      treeShaking &&
      treeShaking.enable &&
      process.env.NODE_ENV === 'production'
    ) {
      process.env.UNI_OPT_TREESHAKINGNG = true
      process.UNI_USER_APIS = new Set()
      if (Array.isArray(treeShaking.modules) && treeShaking.modules.length) {
        const {
          parseUserApis
        } = require('@dcloudio/uni-cli-shared/lib/api')
        try {
          const modules = require('@dcloudio/uni-h5/lib/modules.json')
          process.UNI_USER_APIS = parseUserApis(treeShaking.modules || [], modules)
        } catch (e) {}
      }
    }
    if (optimization.prefetch) {
      process.env.UNI_OPT_PREFETCH = true
    }
    if (optimization.preload) {
      process.env.UNI_OPT_PRELOAD = true
    }
  }
247 248
  const buffer = fs.readFileSync(require.resolve('@dcloudio/uni-h5/dist/index.css'))
  process.env.VUE_APP_INDEX_CSS_HASH = loaderUtils.getHashDigest(buffer, 'md5', 'hex', 8)
fxy060608's avatar
fxy060608 已提交
249 250 251 252 253 254
}

if (process.env.UNI_PLATFORM === 'mp-qq') { // QQ小程序 强制自定义组件模式
  platformOptions.usingComponents = true
}

255
let isNVueCompiler = true
fxy060608's avatar
fxy060608 已提交
256
if (process.env.UNI_PLATFORM === 'app-plus') {
257 258
  if (platformOptions.nvueCompiler === 'weex') {
    isNVueCompiler = false
fxy060608's avatar
fxy060608 已提交
259
  }
fxy060608's avatar
fxy060608 已提交
260 261 262 263 264 265 266

  delete process.env.UNI_USING_CACHE
  if (platformOptions.renderer === 'native') {
    process.env.UNI_USING_V3_NATIVE = true
  } else {
    process.env.UNI_USING_V3 = true
    platformOptions.usingComponents = true
fxy060608's avatar
fxy060608 已提交
267
  }
fxy060608's avatar
fxy060608 已提交
268 269 270
  process.env.UNI_OUTPUT_TMP_DIR = ''
  // isNVueCompiler = true // v3 目前仅支持 uni-app 模式

fxy060608's avatar
fxy060608 已提交
271 272 273 274 275 276 277 278 279 280 281 282 283 284
  // v3 支持指定 js 混淆(仅发行模式)
  if (
    process.env.NODE_ENV === 'production' &&
    process.env.UNI_USING_V3
  ) {
    const resources = platformOptions.confusion &&
      platformOptions.confusion.resources
    const resourcesKeys = resources &&
      Object.keys(resources).filter(filepath => path.extname(filepath) === '.js')
    if (resourcesKeys && resourcesKeys.length) {
      process.UNI_CONFUSION = resourcesKeys.map(filepath =>
        normalizePath(path.resolve(process.env.UNI_INPUT_DIR, filepath))
      )
    }
fxy060608's avatar
fxy060608 已提交
285
  }
fxy060608's avatar
fxy060608 已提交
286 287 288
} else { // 其他平台,待确认配置方案
  if (
    manifestJsonObj['app-plus'] &&
fxy060608's avatar
fxy060608 已提交
289
    manifestJsonObj['app-plus'].nvueCompiler === 'weex'
fxy060608's avatar
fxy060608 已提交
290
  ) {
291
    isNVueCompiler = false
fxy060608's avatar
fxy060608 已提交
292 293 294 295 296 297 298
  }
}

if (isNVueCompiler) {
  process.env.UNI_USING_NVUE_COMPILER = true
}

299
if (platformOptions.nvueStyleCompiler === 'uni-app') {
300
  process.env.UNI_USING_NVUE_STYLE_COMPILER = true
301 302
} else {
  platformOptions.nvueStyleCompiler = 'weex'
303 304
}

fxy060608's avatar
fxy060608 已提交
305 306 307 308 309 310 311 312 313
if (platformOptions.usingComponents === true) {
  if (process.env.UNI_PLATFORM !== 'h5') {
    process.env.UNI_USING_COMPONENTS = true
  }
  if (process.env.UNI_PLATFORM === 'app-plus') {
    process.env.UNI_USING_V8 = true
  }
}

314 315
// 兼容历史配置 betterScopedSlots
const modes = ['legacy', 'auto', 'augmented']
Q
qiang 已提交
316 317
const scopedSlotsCompiler = !platformOptions.scopedSlotsCompiler && platformOptions.betterScopedSlots ? modes[2]
  : platformOptions.scopedSlotsCompiler
318
process.env.SCOPED_SLOTS_COMPILER = modes.includes(scopedSlotsCompiler) ? scopedSlotsCompiler : modes[1]
319
// 快手小程序、小红书小程序 抽象组件编译报错,如未指定 legacy 固定为 augmented 模式
M
mehaotian 已提交
320 321
if ((process.env.UNI_PLATFORM === 'mp-kuaishou' || process.env.UNI_PLATFORM === 'mp-xhs') && process.env
  .SCOPED_SLOTS_COMPILER !== modes[0]) {
322 323
  process.env.SCOPED_SLOTS_COMPILER = modes[2]
}
324

325 326
process.env.MERGE_VIRTUAL_HOST_ATTRIBUTES = (!!platformOptions.mergeVirtualHostAttributes).toString()

327 328
process.env.UNI_STAT_UNI_CLOUD = ''
process.env.UNI_STAT_DEBUG = ''
fxy060608's avatar
fxy060608 已提交
329
if (
330 331
  process.env.UNI_USING_COMPONENTS ||
  process.env.UNI_PLATFORM === 'h5'
fxy060608's avatar
fxy060608 已提交
332
) { // 自定义组件模式或 h5 平台
333 334 335 336 337
  const uniStatistics = Object.assign(
    manifestJsonObj.uniStatistics || {},
    platformOptions.uniStatistics || {}
  )

fxy060608's avatar
fxy060608 已提交
338
  if (uniStatistics.enable === true) {
M
mehaotian 已提交
339
    process.env.UNI_USING_STAT = uniStatistics.version === '2' ? '2' : '1'
340 341 342 343 344
    // 获取服务空间配置信息
    const uniCloudConfig = uniStatistics.uniCloud || {}
    process.env.UNI_STAT_UNI_CLOUD = JSON.stringify(uniCloudConfig)
    process.env.UNI_STAT_DEBUG = uniStatistics.debug === true ? 'true' : 'false'

M
mehaotian 已提交
345 346 347 348 349 350 351 352 353
    if (process.env.NODE_ENV === 'production') {
      if (!process.UNI_STAT_CONFIG.appid) {
        console.log()
        console.warn(uniI18n.__('pluginUni.uniStatisticsNoAppid', {
          0: 'https://ask.dcloud.net.cn/article/36303'
        }))
        console.log()
      } else {
        if (!uniStatistics.version) {
M
mehaotian 已提交
354 355 356 357 358
          console.log()
          console.warn(uniI18n.__('pluginUni.uniStatisticsNoVersion', {
            0: 'https://uniapp.dcloud.io/uni-stat-v2.html'
          }))
          console.log()
M
mehaotian 已提交
359 360 361 362
        } else {
          console.log()
          console.warn(`已开启 uni统计${uniStatistics.version}.0 版本`)
          console.log()
M
mehaotian 已提交
363 364
        }
      }
365
    } else {
366
      if (!uniStatistics.version) {
M
mehaotian 已提交
367 368 369 370 371
        console.log()
        console.warn(uniI18n.__('pluginUni.uniStatisticsNoVersion', {
          0: 'https://uniapp.dcloud.io/uni-stat-v2.html'
        }))
        console.log()
372 373 374 375 376
      } else {
        console.log()
        console.warn(`已开启 uni统计${uniStatistics.version}.0 版本`)
        console.log()
      }
377 378 379 380
    }
  }
}

fxy060608's avatar
fxy060608 已提交
381 382 383 384 385 386 387 388 389
if (process.env.UNI_USING_COMPONENTS) { // 是否启用分包优化
  if (platformOptions.optimization) {
    if (
      isSupportSubPackages() &&
      platformOptions.optimization.subPackages &&
      Object.keys(process.UNI_SUBPACKAGES).length
    ) {
      process.env.UNI_OPT_SUBPACKAGES = true
    }
fxy060608's avatar
fxy060608 已提交
390 391
  }
}
392

393
const warningMsg =
Q
qiang 已提交
394 395 396
  usingComponentsAbsent
    ? '该应用之前可能是非自定义组件模式,目前以自定义组件模式运行。非自定义组件已于2019年11月1日起停止支持。详见:https://ask.dcloud.net.cn/article/36385'
    : 'uni-app已于2019年11月1日起停止支持非自定义组件模式 [详情](https://ask.dcloud.net.cn/article/36385)'
397 398

const needWarning = !platformOptions.usingComponents || usingComponentsAbsent
fxy060608's avatar
fxy060608 已提交
399
let hasNVue = false
fxy060608's avatar
fxy060608 已提交
400
// 输出编译器版本等信息
D
DCloud_LXH 已提交
401 402 403
const pagesPkg = require('@dcloudio/webpack-uni-pages-loader/package.json')
process.env.UNI_COMPILER_VERSION = ''
if (pagesPkg) {
Q
qiang 已提交
404
  process.env.UNI_COMPILER_VERSION = pagesPkg['uni-app'].compilerVersion
D
DCloud_LXH 已提交
405
}
Q
qiang 已提交
406
const compileModeUrl = 'https://ask.dcloud.net.cn/article/36074'
fxy060608's avatar
fxy060608 已提交
407
if (process.env.UNI_USING_NATIVE || process.env.UNI_USING_V3_NATIVE) {
Q
qiang 已提交
408
  const compileMode = (process.env.UNI_USING_V3_NATIVE ? '(v3)' : '') + '' + (isNVueCompiler ? 'uni-app' : 'weex')
fxy060608's avatar
fxy060608 已提交
409 410 411 412
  console.log(uniI18n.__('pluginUni.nvueCompileModeForDetail', {
    0: compileMode,
    1: compileModeUrl
  }))
fxy060608's avatar
fxy060608 已提交
413
} else if (process.env.UNI_PLATFORM !== 'h5' && process.env.UNI_PLATFORM !== 'quickapp-native') {
fxy060608's avatar
fxy060608 已提交
414
  try {
Q
qiang 已提交
415
    const info = process.env.UNI_COMPILER_VERSION
fxy060608's avatar
fxy060608 已提交
416
    if (process.env.UNI_PLATFORM === 'app-plus') {
fxy060608's avatar
fxy060608 已提交
417 418 419
      if (process.env.UNI_USING_V3) {
        console.log(info)
      } else {
fxy060608's avatar
fxy060608 已提交
420 421 422 423 424 425 426 427 428
        const glob = require('glob')
        hasNVue = !!glob.sync('pages/**/*.nvue', {
          cwd: process.env.UNI_INPUT_DIR
        }).length
        if (hasNVue) {
          console.log(info)
          if (needWarning) {
            console.log(warningMsg)
          }
fxy060608's avatar
fxy060608 已提交
429 430 431 432
          console.log(uniI18n.__('pluginUni.nvueCompileModeForDetail', {
            0: (isNVueCompiler ? 'uni-app' : 'weex'),
            1: compileModeUrl
          }))
fxy060608's avatar
fxy060608 已提交
433
        } else {
434
          console.log(info)
fxy060608's avatar
fxy060608 已提交
435 436 437
          if (needWarning) {
            console.log(warningMsg)
          }
438
        }
fxy060608's avatar
fxy060608 已提交
439 440
      }
    } else {
441
      if (needWarning) {
442
        console.log(warningMsg)
443
      }
fxy060608's avatar
fxy060608 已提交
444 445 446
    }
  } catch (e) {}
}
fxy060608's avatar
fxy060608 已提交
447
if (process.env.NODE_ENV !== 'production') { // 运行模式性能提示
d-u-a's avatar
d-u-a 已提交
448
  let perfMsg = uniI18n.__('pluginUni.runDebugMode')
fxy060608's avatar
fxy060608 已提交
449
  if (hasNVue) { // app-nvue
d-u-a's avatar
d-u-a 已提交
450
    perfMsg = perfMsg + uniI18n.__('pluginUni.runDebugModeNvue')
fxy060608's avatar
fxy060608 已提交
451
  } else if (process.env.UNI_PLATFORM.indexOf('mp-') === 0) { // 小程序
d-u-a's avatar
d-u-a 已提交
452
    perfMsg = perfMsg + uniI18n.__('pluginUni.runDebugModeMP')
fxy060608's avatar
fxy060608 已提交
453 454 455
  }
  console.log(perfMsg)
}
fxy060608's avatar
fxy060608 已提交
456

457
// 将 template-compiler 指向修订后的版本
fxy060608's avatar
fxy060608 已提交
458
moduleAlias.addAlias('vue-template-compiler', '@dcloudio/vue-cli-plugin-uni/packages/vue-template-compiler')
fxy060608's avatar
fxy060608 已提交
459
moduleAlias.addAlias('@megalo/template-compiler', '@dcloudio/vue-cli-plugin-uni/packages/@megalo/template-compiler')
460
moduleAlias.addAlias('mpvue-template-compiler', '@dcloudio/vue-cli-plugin-uni/packages/mpvue-template-compiler')
461
// vue-loader
fxy060608's avatar
fxy060608 已提交
462
moduleAlias.addAlias('vue-loader', '@dcloudio/vue-cli-plugin-uni/packages/vue-loader')
fxy060608's avatar
fxy060608 已提交
463
// sass-loader
fxy060608's avatar
fxy060608 已提交
464
moduleAlias.addAlias('sass-loader', '@dcloudio/vue-cli-plugin-uni/packages/sass-loader')
fxy060608's avatar
fxy060608 已提交
465

fxy060608's avatar
fxy060608 已提交
466 467
if (process.env.UNI_USING_V3 && process.env.UNI_PLATFORM === 'app-plus') {
  moduleAlias.addAlias('./runtime/getUrl.js', '@dcloudio/vue-cli-plugin-uni/lib/app-plus/getUrl.js')
fxy060608's avatar
fxy060608 已提交
468
  moduleAlias.addAlias('../runtime/getUrl.js', '@dcloudio/vue-cli-plugin-uni/lib/app-plus/getUrl.js')
fxy060608's avatar
fxy060608 已提交
469
  moduleAlias.addAlias('vue-style-loader', '@dcloudio/vue-cli-plugin-uni/packages/app-vue-style-loader')
470
}
fxy060608's avatar
fxy060608 已提交
471

Q
qiang 已提交
472 473 474
if (process.env.UNI_PLATFORM === 'h5') {
  moduleAlias.addAlias('vue-style-loader', '@dcloudio/vue-cli-plugin-uni/packages/h5-vue-style-loader')
}
fxy060608's avatar
fxy060608 已提交
475

P
panyiming.325 已提交
476
if (process.env.UNI_PLATFORM === 'mp-toutiao' || process.env.UNI_PLATFORM === 'mp-lark') {
477 478 479 480 481 482 483
  // !important 始终带有一个空格
  moduleAlias.addAlias(
    'postcss-normalize-whitespace',
    '@dcloudio/vue-cli-plugin-uni/packages/postcss-normalize-whitespace'
  )
}

fxy060608's avatar
fxy060608 已提交
484 485
if (runByHBuilderX) {
  const oldError = console.error
Q
qiang 已提交
486
  console.error = function (msg) {
fxy060608's avatar
fxy060608 已提交
487
    if (typeof msg === 'string' && msg.includes(
Q
qiang 已提交
488
      '[BABEL] Note: The code generator has deoptimised the styling of')) {
fxy060608's avatar
fxy060608 已提交
489 490
      const filePath = msg.replace('[BABEL] Note: The code generator has deoptimised the styling of ', '').split(
        ' as ')[0]
d-u-a's avatar
d-u-a 已提交
491
      console.log('[' + uniI18n.__('warning') + '] `' + path.relative(process.env.UNI_INPUT_DIR, filePath) +
fxy060608's avatar
fxy060608 已提交
492 493 494 495 496 497 498
        '` 文件体积超过 500KB,已跳过压缩以及 ES6 转 ES5 的处理,手机端使用过大的js库影响性能。')
    } else {
      oldError.apply(console, arguments)
      // TODO 如果是首次运行遇到错误直接退出
    }
  }
}
499

fxy060608's avatar
fxy060608 已提交
500 501
if (
  process.env.UNI_USING_CACHE &&
fxy060608's avatar
fxy060608 已提交
502
  process.env.UNI_PLATFORM !== 'h5' &&
fxy060608's avatar
fxy060608 已提交
503
  !process.env.UNI_USING_V3 &&
fxy060608's avatar
fxy060608 已提交
504 505
  !process.env.UNI_USING_NATIVE &&
  !process.env.UNI_USING_V3_NATIVE
fxy060608's avatar
fxy060608 已提交
506 507
) { // 使用 cache, 拷贝 cache 的 json
  const cacheJsonDir = path.resolve(
fxy060608's avatar
fxy060608 已提交
508
    process.env.UNI_CLI_CONTEXT,
fxy060608's avatar
fxy060608 已提交
509
    'node_modules/.cache/uni-pages-loader/' + process.env.UNI_PLATFORM
fxy060608's avatar
fxy060608 已提交
510 511 512 513
  )
  if (!fs.existsSync(cacheJsonDir)) { //  创建 cache 目录
    mkdirp(cacheJsonDir)
  } else {
fxy060608's avatar
fxy060608 已提交
514
    require('@dcloudio/uni-cli-shared/lib/cache').restore()
fxy060608's avatar
fxy060608 已提交
515 516 517
  }
}

518
const {
519
  initAutoImportComponents,
fxy060608's avatar
fxy060608 已提交
520
  initAutoImportScanComponents
521 522 523 524 525 526 527
} = require('@dcloudio/uni-cli-shared/lib/pages')

process.UNI_AUTO_SCAN_COMPONENTS = !(pagesJsonObj.easycom && pagesJsonObj.easycom.autoscan === false)
initAutoImportComponents(pagesJsonObj.easycom)
if (process.UNI_AUTO_SCAN_COMPONENTS) {
  initAutoImportScanComponents()
}
528

fxy060608's avatar
fxy060608 已提交
529 530 531 532
global.uniPlugin.configureEnv.forEach(configureEnv => {
  configureEnv()
})

fxy060608's avatar
fxy060608 已提交
533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553
if (
  process.env.UNI_PLATFORM === 'h5' ||
  (
    process.env.UNI_PLATFORM === 'app-plus' &&
    process.env.UNI_USING_V3
  )
) {
  const migrate = require('@dcloudio/uni-migration')
  const wxcomponentDirs = [path.resolve(process.env.UNI_INPUT_DIR, 'wxcomponents')]
  global.uniModules.forEach(module => {
    wxcomponentDirs.push(path.resolve(process.env.UNI_INPUT_DIR, 'uni_modules', module, 'wxcomponents'))
  })
  wxcomponentDirs.forEach(wxcomponentsDir => {
    if (fs.existsSync(wxcomponentsDir)) { // 转换 mp-weixin 小程序组件
      migrate(wxcomponentsDir, false, {
        silent: true // 不输出日志
      })
    }
  })
}

fxy060608's avatar
fxy060608 已提交
554
if (process.env.UNI_PLATFORM.startsWith('mp-')) {
fxy060608's avatar
fxy060608 已提交
555 556 557
  console.log(uniI18n.__('pluginUni.mpBrowserKernelDifference', {
    0: 'https://uniapp.dcloud.io/matter?id=mp'
  }))
fxy060608's avatar
fxy060608 已提交
558 559
}

d-u-a's avatar
d-u-a 已提交
560
runByHBuilderX && console.log(uniI18n.__('compiling'))
fxy060608's avatar
fxy060608 已提交
561 562 563

module.exports = {
  manifestPlatformOptions: platformOptions
fxy060608's avatar
fxy060608 已提交
564
}