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.
99 lines
3.1 KiB
99 lines
3.1 KiB
const fs = require('fs')
|
|
const path = require('path')
|
|
|
|
const {
|
|
sassLoaderVersion
|
|
} = require('@dcloudio/uni-cli-shared/lib/scss')
|
|
|
|
const isWin = /^win/.test(process.platform)
|
|
|
|
function genTranspileDepRegex (depPath) {
|
|
return new RegExp(isWin
|
|
? depPath.replace(/\\/g, '\\\\') // double escape for windows style path
|
|
: depPath)
|
|
}
|
|
|
|
module.exports = function initOptions (options) {
|
|
const {
|
|
getPlatformScss,
|
|
getPlatformSass
|
|
} = require('@dcloudio/uni-cli-shared')
|
|
|
|
if (!options.transpileDependencies) {
|
|
options.transpileDependencies = []
|
|
}
|
|
|
|
// 增加 src/node_modules 解析
|
|
options.transpileDependencies.push(genTranspileDepRegex(path.resolve(process.env.UNI_INPUT_DIR, 'node_modules')))
|
|
options.transpileDependencies.push('@dcloudio/uni-' + process.env.UNI_PLATFORM)
|
|
options.transpileDependencies.push('@dcloudio/uni-stat')
|
|
options.transpileDependencies.push('@dcloudio/vue-cli-plugin-uni/packages/uni-cloud')
|
|
|
|
if (process.env.UNI_PLATFORM !== 'mp-weixin') { // mp runtime
|
|
options.transpileDependencies.push('@dcloudio/uni-mp-weixin')
|
|
}
|
|
|
|
if (process.env.UNI_PLATFORM === 'h5') { // h5 dev 用到了这两个,需要 babel
|
|
options.transpileDependencies.push('ansi-regex')
|
|
options.transpileDependencies.push('strip-ansi')
|
|
}
|
|
|
|
if (!options.css) {
|
|
options.css = {}
|
|
}
|
|
|
|
if (process.env.UNI_PLATFORM === 'h5' || process.env.UNI_USING_V3) {
|
|
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 = {}
|
|
}
|
|
|
|
if (!options.css.loaderOptions.postcss.config) {
|
|
options.css.loaderOptions.postcss.config = {}
|
|
}
|
|
|
|
// 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) {
|
|
sassData = '@import "@/uni.sass"'
|
|
} else if (isScss) {
|
|
sassData = `${sassData}
|
|
@import "@/uni.scss";`
|
|
}
|
|
|
|
if (!options.css.loaderOptions.sass.sassOptions) {
|
|
options.css.loaderOptions.sass.sassOptions = {}
|
|
}
|
|
// 指定 outputStyle, 否则 production 模式下会被默认成 compressed
|
|
const outputStyle = options.css.loaderOptions.sass.sassOptions.outputStyle
|
|
if (!outputStyle || outputStyle === 'compressed') {
|
|
options.css.loaderOptions.sass.sassOptions.outputStyle = 'expanded'
|
|
}
|
|
|
|
if (sassLoaderVersion < 8) {
|
|
options.css.loaderOptions.sass.data = sassData
|
|
} else {
|
|
const name = sassLoaderVersion >= 9 ? 'additionalData' : 'prependData'
|
|
options.css.loaderOptions.sass[name] = sassData
|
|
}
|
|
|
|
const userPostcssConfigPath = path.resolve(process.env.UNI_INPUT_DIR, 'postcss.config.js')
|
|
if (fs.existsSync(userPostcssConfigPath)) {
|
|
options.css.loaderOptions.postcss.config.path = userPostcssConfigPath
|
|
} else {
|
|
options.css.loaderOptions.postcss.config.path = path.resolve(process.env.UNI_CLI_CONTEXT, 'postcss.config.js')
|
|
}
|
|
}
|
|
|