env.js 18.6 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 24 25 26 27 28 29
const {
  getManifestJson,
  isEnableUniPushV2,
  isUniPushOffline
} = require('@dcloudio/uni-cli-shared/lib/manifest')

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

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

fxy060608's avatar
fxy060608 已提交
37 38 39 40 41 42
// 小程序 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 已提交
43
}
fxy060608's avatar
fxy060608 已提交
44 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 53

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

fxy060608's avatar
fxy060608 已提交
55 56 57 58 59 60
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 已提交
61

fxy060608's avatar
fxy060608 已提交
62 63
process.env.VUE_APP_NAME = manifestJsonObj.name

fxy060608's avatar
fxy060608 已提交
64
process.env.UNI_USING_V3_SCOPED = true
fxy060608's avatar
fxy060608 已提交
65

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

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

72 73 74
const isH5 = !process.env.UNI_SUB_PLATFORM && process.env.UNI_PLATFORM === 'h5'
const isProduction = process.env.NODE_ENV === 'production'

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

      if (
        hasUniCloudSpace &&
        isH5 &&
        isProduction
      ) {
fxy060608's avatar
fxy060608 已提交
92 93 94
        console.warn(uniI18n.__('pluginUni.unicloudReleaseH5', {
          0: 'https://uniapp.dcloud.io/uniCloud/quickstart?id=useinh5'
        }))
95 96 97 98 99
      } else if (
        hasUniCloudSpace &&
        isH5 &&
        !isProduction
      ) {
fxy060608's avatar
fxy060608 已提交
100 101 102
        console.warn(uniI18n.__('pluginUni.unicloudShowedRunByHBuilderX', {
          0: 'https://uniapp.dcloud.io/uniCloud/quickstart?id=useinh5'
        }))
103 104
      }

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

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

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

Q
qiang 已提交
133
process.env.UNI_OUTPUT_DEFAULT_DIR = path.resolve(process.env.UNI_CLI_CONTEXT, defaultOutputDir)
fxy060608's avatar
fxy060608 已提交
134 135 136 137 138 139
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
140
process.env.UNI_OUTPUT_DIR = process.env.UNI_OUTPUT_DIR || process.env.UNI_OUTPUT_DEFAULT_DIR
fxy060608's avatar
fxy060608 已提交
141 142 143 144 145 146 147

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 已提交
148
if (process.env.NODE_ENV === 'production') { // 发行模式,不启用 cache
149
  delete process.env.UNI_USING_CACHE
fxy060608's avatar
fxy060608 已提交
150 151
}

fxy060608's avatar
fxy060608 已提交
152 153 154 155 156 157
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 已提交
158
const {
fxy060608's avatar
fxy060608 已提交
159
  normalizePath,
fxy060608's avatar
fxy060608 已提交
160 161
  isSupportSubPackages,
  runByHBuilderX,
fxy060608's avatar
fxy060608 已提交
162
  getPagesJson
163 164 165
} = require('@dcloudio/uni-cli-shared')

process.env.RUN_BY_HBUILDERX = JSON.stringify(runByHBuilderX)
166 167 168 169 170 171

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

initUniModules()
fxy060608's avatar
fxy060608 已提交
172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192

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 已提交
193 194
process.UNI_PAGES = pagesJsonObj

fxy060608's avatar
fxy060608 已提交
195 196 197 198 199 200 201 202
if (manifestJsonObj.debug) {
  process.env.VUE_APP_DEBUG = true
}

process.UNI_STAT_CONFIG = {
  appid: manifestJsonObj.appid
}

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

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
    }
  }
241 242
  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 已提交
243 244 245 246 247 248
}

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

249
let isNVueCompiler = true
fxy060608's avatar
fxy060608 已提交
250
if (process.env.UNI_PLATFORM === 'app-plus') {
251 252
  if (platformOptions.nvueCompiler === 'weex') {
    isNVueCompiler = false
fxy060608's avatar
fxy060608 已提交
253
  }
fxy060608's avatar
fxy060608 已提交
254 255 256 257 258 259 260

  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 已提交
261
  }
fxy060608's avatar
fxy060608 已提交
262 263 264
  process.env.UNI_OUTPUT_TMP_DIR = ''
  // isNVueCompiler = true // v3 目前仅支持 uni-app 模式

fxy060608's avatar
fxy060608 已提交
265 266 267 268 269 270 271 272 273 274 275 276 277 278
  // 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 已提交
279
  }
fxy060608's avatar
fxy060608 已提交
280 281 282
} else { // 其他平台,待确认配置方案
  if (
    manifestJsonObj['app-plus'] &&
fxy060608's avatar
fxy060608 已提交
283
    manifestJsonObj['app-plus'].nvueCompiler === 'weex'
fxy060608's avatar
fxy060608 已提交
284
  ) {
285
    isNVueCompiler = false
fxy060608's avatar
fxy060608 已提交
286 287 288 289 290 291 292
  }
}

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

293
if (platformOptions.nvueStyleCompiler === 'uni-app') {
294
  process.env.UNI_USING_NVUE_STYLE_COMPILER = true
295 296
} else {
  platformOptions.nvueStyleCompiler = 'weex'
297 298
}

fxy060608's avatar
fxy060608 已提交
299 300 301 302 303 304 305 306 307
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
  }
}

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

319 320
process.env.UNI_STAT_UNI_CLOUD = ''
process.env.UNI_STAT_DEBUG = ''
fxy060608's avatar
fxy060608 已提交
321
if (
322 323
  process.env.UNI_USING_COMPONENTS ||
  process.env.UNI_PLATFORM === 'h5'
fxy060608's avatar
fxy060608 已提交
324
) { // 自定义组件模式或 h5 平台
325 326 327 328 329
  const uniStatistics = Object.assign(
    manifestJsonObj.uniStatistics || {},
    platformOptions.uniStatistics || {}
  )

fxy060608's avatar
fxy060608 已提交
330
  if (uniStatistics.enable === true) {
M
mehaotian 已提交
331
    process.env.UNI_USING_STAT = uniStatistics.version === '2' ? '2' : '1'
332 333 334 335 336
    // 获取服务空间配置信息
    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 已提交
337 338 339 340 341 342 343 344 345
    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 已提交
346 347 348 349 350
          // console.log()
          // console.warn(uniI18n.__('pluginUni.uniStatisticsNoVersion', {
          //   0: 'https://uniapp.dcloud.io/uni-stat-v2.html'
          // }))
          // console.log()
M
mehaotian 已提交
351 352 353 354
        } else {
          console.log()
          console.warn(`已开启 uni统计${uniStatistics.version}.0 版本`)
          console.log()
M
mehaotian 已提交
355 356
        }
      }
357
    } else {
358
      if (!uniStatistics.version) {
M
mehaotian 已提交
359 360 361 362 363
        // console.log()
        // console.warn(uniI18n.__('pluginUni.uniStatisticsNoVersion', {
        //   0: 'https://uniapp.dcloud.io/uni-stat-v2.html'
        // }))
        // console.log()
364 365 366 367 368
      } else {
        console.log()
        console.warn(`已开启 uni统计${uniStatistics.version}.0 版本`)
        console.log()
      }
369 370 371 372
    }
  }
}

fxy060608's avatar
fxy060608 已提交
373 374 375 376 377 378 379 380 381
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 已提交
382 383
  }
}
384

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

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

449
// 将 template-compiler 指向修订后的版本
fxy060608's avatar
fxy060608 已提交
450
moduleAlias.addAlias('vue-template-compiler', '@dcloudio/vue-cli-plugin-uni/packages/vue-template-compiler')
fxy060608's avatar
fxy060608 已提交
451
moduleAlias.addAlias('@megalo/template-compiler', '@dcloudio/vue-cli-plugin-uni/packages/@megalo/template-compiler')
452
moduleAlias.addAlias('mpvue-template-compiler', '@dcloudio/vue-cli-plugin-uni/packages/mpvue-template-compiler')
453
// vue-loader
fxy060608's avatar
fxy060608 已提交
454
moduleAlias.addAlias('vue-loader', '@dcloudio/vue-cli-plugin-uni/packages/vue-loader')
fxy060608's avatar
fxy060608 已提交
455
// sass-loader
fxy060608's avatar
fxy060608 已提交
456
moduleAlias.addAlias('sass-loader', '@dcloudio/vue-cli-plugin-uni/packages/sass-loader')
fxy060608's avatar
fxy060608 已提交
457

fxy060608's avatar
fxy060608 已提交
458 459
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 已提交
460
  moduleAlias.addAlias('../runtime/getUrl.js', '@dcloudio/vue-cli-plugin-uni/lib/app-plus/getUrl.js')
fxy060608's avatar
fxy060608 已提交
461
  moduleAlias.addAlias('vue-style-loader', '@dcloudio/vue-cli-plugin-uni/packages/app-vue-style-loader')
462
}
fxy060608's avatar
fxy060608 已提交
463

Q
qiang 已提交
464 465 466
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 已提交
467

P
panyiming.325 已提交
468
if (process.env.UNI_PLATFORM === 'mp-toutiao' || process.env.UNI_PLATFORM === 'mp-lark') {
469 470 471 472 473 474 475
  // !important 始终带有一个空格
  moduleAlias.addAlias(
    'postcss-normalize-whitespace',
    '@dcloudio/vue-cli-plugin-uni/packages/postcss-normalize-whitespace'
  )
}

fxy060608's avatar
fxy060608 已提交
476 477
if (runByHBuilderX) {
  const oldError = console.error
Q
qiang 已提交
478
  console.error = function (msg) {
fxy060608's avatar
fxy060608 已提交
479
    if (typeof msg === 'string' && msg.includes(
Q
qiang 已提交
480
      '[BABEL] Note: The code generator has deoptimised the styling of')) {
fxy060608's avatar
fxy060608 已提交
481 482
      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 已提交
483
      console.log('[' + uniI18n.__('warning') + '] `' + path.relative(process.env.UNI_INPUT_DIR, filePath) +
fxy060608's avatar
fxy060608 已提交
484 485 486 487 488 489 490
        '` 文件体积超过 500KB,已跳过压缩以及 ES6 转 ES5 的处理,手机端使用过大的js库影响性能。')
    } else {
      oldError.apply(console, arguments)
      // TODO 如果是首次运行遇到错误直接退出
    }
  }
}
491

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

510
const {
511
  initAutoImportComponents,
fxy060608's avatar
fxy060608 已提交
512
  initAutoImportScanComponents
513 514 515 516 517 518 519
} = 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()
}
520

fxy060608's avatar
fxy060608 已提交
521 522 523 524
global.uniPlugin.configureEnv.forEach(configureEnv => {
  configureEnv()
})

fxy060608's avatar
fxy060608 已提交
525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545
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 已提交
546
if (process.env.UNI_PLATFORM.startsWith('mp-')) {
fxy060608's avatar
fxy060608 已提交
547 548 549
  console.log(uniI18n.__('pluginUni.mpBrowserKernelDifference', {
    0: 'https://uniapp.dcloud.io/matter?id=mp'
  }))
fxy060608's avatar
fxy060608 已提交
550 551
}

d-u-a's avatar
d-u-a 已提交
552
runByHBuilderX && console.log(uniI18n.__('compiling'))
fxy060608's avatar
fxy060608 已提交
553 554 555

module.exports = {
  manifestPlatformOptions: platformOptions
D
DCloud_LXH 已提交
556
}