刮刮前端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

86 lines
2.7 KiB

const {
getPlatformExts,
createSource
} = require('../shared')
const {
getShadowCss,
getPlatformGlobal
} = require('@dcloudio/uni-cli-shared')
const {
getSpecialMethods
} = require('@dcloudio/uni-cli-shared/lib/cache')
module.exports = function generateApp (compilation) {
const ext = getPlatformExts().style
let importMainCss = ''
let importVendorCss = ''
if (
process.env.NODE_ENV === 'production' &&
process.env.UNI_PLATFORM !== 'app-plus'
) {
const targetCssName = `common/main${ext}`
const asset = compilation.getAsset(targetCssName)
if (!asset) {
compilation.emitAsset(targetCssName, createSource(getShadowCss()))
} else {
const source = asset.source.source() + getShadowCss()
compilation.updateAsset(targetCssName, createSource(source))
}
}
// 框架预设样式 用于隐藏自定义组件
// TODO 分平台 import 不同 css
const platforms = ['mp-weixin', 'mp-qq', 'mp-jd', 'mp-xhs', 'mp-toutiao', 'mp-lark']
const presetStyle = platforms.includes(process.env.UNI_PLATFORM) ? '[data-custom-hidden="true"],[bind-data-custom-hidden="true"]{display: none !important;}' : ''
if (compilation.getAsset(`common/main${ext}`)) { // 是否存在 main.css
importMainCss = `@import './common/main${ext}';`
}
if (compilation.getAsset(`common/vendor${ext}`)) { // 是否存在 vendor.css
importVendorCss += `@import './common/vendor${ext}';`
}
const runtimeJsPath = 'common/runtime.js'
const asset = compilation.getAsset(runtimeJsPath)
if ( // app 和 baidu 不需要
process.env.UNI_PLATFORM !== 'app-plus' &&
process.env.UNI_PLATFORM !== 'mp-baidu' &&
asset &&
!asset.source.__$wrappered
) {
const source =
`
!function(){try{var a=Function("return this")();a&&!a.Math&&(Object.assign(a,{isFinite:isFinite,Array:Array,Date:Date,Error:Error,Function:Function,Math:Math,Object:Object,RegExp:RegExp,String:String,TypeError:TypeError,setTimeout:setTimeout,clearTimeout:clearTimeout,setInterval:setInterval,clearInterval:clearInterval}),"undefined"!=typeof Reflect&&(a.Reflect=Reflect))}catch(a){}}();
${asset.source.source()}
`
const newSource = createSource(source)
newSource.__$wrappered = true
compilation.updateAsset(runtimeJsPath, newSource)
}
const specialMethods = getSpecialMethods()
let beforeCode = ''
if (Object.keys(specialMethods).length) {
beforeCode = `${getPlatformGlobal()}.specialMethods = ${JSON.stringify(specialMethods)}`
}
return [{
file: 'app.js',
source: `${beforeCode}
require('./common/runtime.js')
require('./common/vendor.js')
require('./common/main.js')`
}, {
file: 'app' + ext,
source: `${importMainCss}
${importVendorCss}
${presetStyle}`
}]
}