181 lines
4.6 KiB
JavaScript
181 lines
4.6 KiB
JavaScript
import path from 'path'
|
||
import pkg from '../package.json'
|
||
const chalk = require("chalk")
|
||
const { getEnvs, getDefineConstants, getCacheIdentifier } = require('./utils')
|
||
|
||
require('dotenv-flow').config()
|
||
|
||
const DIST_PATH = `dist/${process.env.TARO_ENV}`
|
||
const APP_ENVS = getEnvs()
|
||
|
||
// 是否为生产模式
|
||
const IS_PROD = process.env.NODE_ENV === 'production'
|
||
const BUILD_TARGET = process.env.TARGET
|
||
const BUILD_APP_SERVER = process.env.SERVER
|
||
|
||
const CONST_ENVS = {
|
||
APP_NAME: pkg.app_name,
|
||
APP_AUTH_PAGE:
|
||
process.env.TARO_ENV == 'h5' ? '/subpage/pages/auth/login' : '/subpages/member/index',
|
||
APP_BUILD_TARGET: BUILD_TARGET,
|
||
APP_LIVE: process.env.APP_LIVE,
|
||
...APP_ENVS
|
||
}
|
||
|
||
Object.keys(CONST_ENVS).forEach(key => {
|
||
console.log(chalk.green(`${key}=${CONST_ENVS[key]}`))
|
||
})
|
||
|
||
|
||
// 是否打包APP
|
||
const IS_APP = BUILD_TARGET === 'app'
|
||
// 是否打包成APP服务
|
||
const IS_APP_SERVER = BUILD_APP_SERVER === 'server'
|
||
|
||
const copyPatterns = [{ from: 'src/assets', to: `${DIST_PATH}/assets` }]
|
||
if (process.env.TARO_ENV == 'weapp') {
|
||
copyPatterns.push({ from: 'src/ext.json', to: `${DIST_PATH}/ext.json` })
|
||
}
|
||
if (process.env.TARO_ENV == 'h5') {
|
||
copyPatterns.push({ from: 'src/files', to: `${DIST_PATH}` })
|
||
}
|
||
if (process.env.TARO_ENV == 'alipay') {
|
||
copyPatterns.push({ from: 'mini.project.json', to: `${DIST_PATH}/mini.project.json` })
|
||
}
|
||
|
||
const config = {
|
||
projectName: pkg.name,
|
||
date: '2021-11-22',
|
||
framework: 'react',
|
||
designWidth: 750,
|
||
deviceRatio: {
|
||
'640': 2.34 / 2,
|
||
'750': 1,
|
||
'828': 1.81 / 2
|
||
},
|
||
sourceRoot: 'src',
|
||
outputRoot: DIST_PATH,
|
||
sass: {
|
||
resource: path.resolve(__dirname, '..', 'src/style/imports.scss'),
|
||
projectDirectory: path.resolve(__dirname, '..')
|
||
},
|
||
|
||
defineConstants: getDefineConstants(CONST_ENVS),
|
||
alias: {
|
||
'taro-ui$': 'taro-ui/lib/index',
|
||
'@': path.join(__dirname, '../src'),
|
||
'lodash': 'lodash-es'
|
||
},
|
||
copy: {
|
||
patterns: copyPatterns
|
||
},
|
||
plugins: [
|
||
// 'taro-plugin-compiler-optimization'
|
||
// '@shopex/taro-plugin-modules',
|
||
// path.join(__dirname, "../src/plugin/test.js")
|
||
// path.join(__dirname, "./modify-taro.js")
|
||
],
|
||
|
||
mini: {
|
||
// webpackChain (chain, webpack) {
|
||
// // chain.plugin('analyzer')
|
||
// // .use(require('webpack-bundle-analyzer').BundleAnalyzerPlugin, [])
|
||
// chain.merge({
|
||
// plugin: {
|
||
// install: {
|
||
// plugin: require('terser-webpack-plugin'),
|
||
// args: [
|
||
// {
|
||
// terserOptions: {
|
||
// compress: true, // 默认使用terser压缩
|
||
// // mangle: false,
|
||
// keep_classnames: true, // 不改变class名称
|
||
// keep_fnames: true, // 不改变函数名称
|
||
// },
|
||
// },
|
||
// ],
|
||
// },
|
||
// },
|
||
// })
|
||
// },
|
||
cache: {
|
||
enable: true,
|
||
cacheDirectory: 'node_modules/.cache',
|
||
cacheIdentifier: getCacheIdentifier(CONST_ENVS)
|
||
},
|
||
miniCssExtractPluginOption: {
|
||
ignoreOrder: true
|
||
},
|
||
optimizeMainPackage: {
|
||
enable: true
|
||
},
|
||
// 图片转换base64
|
||
imageUrlLoaderOption: {
|
||
limit: 0
|
||
},
|
||
postcss: {
|
||
autoprefixer: {
|
||
enable: true
|
||
},
|
||
pxtransform: {
|
||
enable: true,
|
||
config: {}
|
||
},
|
||
url: {
|
||
enable: true,
|
||
config: {
|
||
limit: 10240 // 设定转换尺寸上限
|
||
}
|
||
},
|
||
cssModules: {
|
||
enable: false, // 默认为 false,如需使用 css modules 功能,则设为 true
|
||
config: {
|
||
namingPattern: 'module', // 转换模式,取值为 global/module
|
||
generateScopedName: '[name]__[local]___[hash:base64:5]'
|
||
}
|
||
}
|
||
},
|
||
},
|
||
|
||
h5: {
|
||
// publicPath: IS_PROD ? './' : '/',
|
||
// publicPath: '/',
|
||
publicPath: (IS_APP && IS_PROD && !IS_APP_SERVER) ? './' : '/',
|
||
// publicPath: process.env.APP_PUBLIC_PATH || '/',
|
||
staticDirectory: 'static',
|
||
router: {
|
||
mode: IS_APP ? "hash" : "browser"
|
||
// mode: "browser"
|
||
},
|
||
devServer: {
|
||
// https: true,
|
||
// overlay: {
|
||
// warnings: false,
|
||
// errors: false
|
||
// }
|
||
// https: {
|
||
// key: "../cert/ecshopx-server.key",
|
||
// cert: "../cert/ecshopx-server.crt",
|
||
// // passphrase: "webpack-dev-server",
|
||
// requestCert: true
|
||
// }
|
||
},
|
||
postcss: {
|
||
autoprefixer: {
|
||
enable: true,
|
||
config: {
|
||
overrideBrowserslist: ['last 3 versions', 'Android >= 4.1', 'ios >= 8']
|
||
}
|
||
}
|
||
},
|
||
esnextModules: ['taro-ui']
|
||
}
|
||
}
|
||
|
||
module.exports = function (merge) {
|
||
if (!IS_PROD) {
|
||
return merge({}, config, require('./dev'))
|
||
}
|
||
return merge({}, config, require('./prod'))
|
||
}
|