first commit

This commit is contained in:
2026-09-08 20:28:54 +08:00
commit 2ada8d3d5a
37380 changed files with 4886169 additions and 0 deletions
+9
View File
@@ -0,0 +1,9 @@
(function () {
var userAgent = navigator.userAgent
window.addEventListener('resize', function () {
if (navigator.userAgent !== userAgent) {
/* eslint-disable no-undef */
location.reload()
}
})
})()
+119
View File
@@ -0,0 +1,119 @@
const {
tags
} = require('@dcloudio/uni-cli-shared')
const parser = require('@babel/parser')
const t = require('@babel/types')
const simplePathRE = /^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/
function isFunction (expr) {
try {
const body = parser.parse(`(${expr})`).program.body[0]
const expression = body.expression
return t.isFunctionDeclaration(body) || t.isArrowFunctionExpression(expression) || t.isFunctionExpression(
expression)
} catch (error) {}
}
function processEvent (expr, filterModules) {
const isMethodPath = simplePathRE.test(expr)
if (isMethodPath || isFunction(expr)) {
if (filterModules.find(name => expr.indexOf(name + '.') === 0)) {
return `
$event = $handleWxsEvent($event);
(${expr})($event, $getComponentDescriptor())
`
} else {
expr = `(${expr})(...arguments)`
}
}
return `
arguments[0] = $event = $handleEvent($event);
${expr}
`
}
function hasOwn (obj, key) {
return hasOwnProperty.call(obj, key)
}
const deprecated = {
events: {
tap: 'click',
longtap: 'longpress'
}
}
function addTag (tag) {
if (!process.UNI_TAGS) {
process.UNI_TAGS = new Set()
}
process.UNI_TAGS.add(tag)
}
module.exports = {
h5: true,
modules: [require('../format-text'), {
preTransformNode (el, options) {
if (el.tag.indexOf('v-uni-') === 0) {
addTag(el.tag.replace('v-uni-', ''))
} else if (hasOwn(tags, el.tag)) {
addTag(el.tag)
el.tag = 'v-uni-' + el.tag
}
},
postTransformNode (el, {
warn,
filterModules
}) {
if (el.tag === 'block') {
el.tag = 'template'
const vForKey = el.key
if (vForKey) {
delete el.key
el.children.forEach((childEl, index) => {
const childVForKey = childEl.key
if (childVForKey) {
childEl.key = `${childVForKey}+'_'+${vForKey}+'_${index}'`
} else {
childEl.key = `${vForKey}+'_${index}'`
}
})
}
}
if (el.events || el.nativeEvents) {
filterModules = filterModules || []
const {
events: eventsMap
} = deprecated
// const warnLogs = new Set()
normalizeEvent(el.events, eventsMap, filterModules)
normalizeEvent(el.nativeEvents, eventsMap, filterModules)
}
}
}]
}
function normalizeEvent (events, eventsMap, filterModules) {
if (!events) {
return
}
Object.keys(events).forEach(name => {
// 过时事件类型转换
if (eventsMap[name]) {
events[eventsMap[name]] = events[name]
delete events[name]
// warnLogs.add(`警告:事件${name}已过时,推荐使用${eventsMap[name]}代替`)
name = eventsMap[name]
}
const handlers = events[name]
if (Array.isArray(handlers)) {
handlers.forEach(handler => {
handler.value = processEvent(handler.value, filterModules)
})
} else {
handlers.value = processEvent(handlers.value, filterModules)
}
})
}
+61
View File
@@ -0,0 +1,61 @@
const {
getPlatformCssnano
} = require('@dcloudio/uni-cli-shared')
const webpack = require('webpack')
module.exports = function initCssnanoOptions (webpackConfig) {
const module = webpackConfig.module
// TODO 临时 hack calc:false 看看 vue cli 后续是否开放 cssnano 的配置
const cssnanoOptions = {
sourceMap: false
}
const plugins = [require('cssnano')({
preset: ['default', getPlatformCssnano()]
})]
// TODO postcss-loader version > 4
if (webpack.version[0] > 4) {
cssnanoOptions.postcssOptions = { plugins }
} else {
cssnanoOptions.plugins = plugins
}
module.rule('css').oneOf('vue-modules').use('cssnano').loader('postcss-loader').options(cssnanoOptions)
module.rule('css').oneOf('vue').use('cssnano').loader('postcss-loader').options(cssnanoOptions)
module.rule('css').oneOf('normal-modules').use('cssnano').loader('postcss-loader').options(
cssnanoOptions)
module.rule('css').oneOf('normal').use('cssnano').loader('postcss-loader').options(cssnanoOptions)
module.rule('postcss').oneOf('vue-modules').use('cssnano').loader('postcss-loader').options(
cssnanoOptions)
module.rule('postcss').oneOf('vue').use('cssnano').loader('postcss-loader').options(cssnanoOptions)
module.rule('postcss').oneOf('normal-modules').use('cssnano').loader('postcss-loader').options(
cssnanoOptions)
module.rule('postcss').oneOf('normal').use('cssnano').loader('postcss-loader').options(cssnanoOptions)
module.rule('scss').oneOf('vue-modules').use('cssnano').loader('postcss-loader').options(cssnanoOptions)
module.rule('scss').oneOf('vue').use('cssnano').loader('postcss-loader').options(cssnanoOptions)
module.rule('scss').oneOf('normal-modules').use('cssnano').loader('postcss-loader').options(
cssnanoOptions)
module.rule('scss').oneOf('normal').use('cssnano').loader('postcss-loader').options(cssnanoOptions)
module.rule('sass').oneOf('vue-modules').use('cssnano').loader('postcss-loader').options(cssnanoOptions)
module.rule('sass').oneOf('vue').use('cssnano').loader('postcss-loader').options(cssnanoOptions)
module.rule('sass').oneOf('normal-modules').use('cssnano').loader('postcss-loader').options(
cssnanoOptions)
module.rule('sass').oneOf('normal').use('cssnano').loader('postcss-loader').options(cssnanoOptions)
module.rule('less').oneOf('vue-modules').use('cssnano').loader('postcss-loader').options(cssnanoOptions)
module.rule('less').oneOf('vue').use('cssnano').loader('postcss-loader').options(cssnanoOptions)
module.rule('less').oneOf('normal-modules').use('cssnano').loader('postcss-loader').options(
cssnanoOptions)
module.rule('less').oneOf('normal').use('cssnano').loader('postcss-loader').options(cssnanoOptions)
module.rule('stylus').oneOf('vue-modules').use('cssnano').loader('postcss-loader').options(
cssnanoOptions)
module.rule('stylus').oneOf('vue').use('cssnano').loader('postcss-loader').options(cssnanoOptions)
module.rule('stylus').oneOf('normal-modules').use('cssnano').loader('postcss-loader').options(
cssnanoOptions)
module.rule('stylus').oneOf('normal').use('cssnano').loader('postcss-loader').options(cssnanoOptions)
}
+198
View File
@@ -0,0 +1,198 @@
const fs = require('fs')
const path = require('path')
const webpack = require('webpack')
const {
getMainEntry,
getH5Options,
getPlatformStat,
getPlatformPush,
getPlatformUniCloud,
getDevUniConsoleCode
} = require('@dcloudio/uni-cli-shared')
const {
getGlobalUsingComponentsCode
} = require('@dcloudio/uni-cli-shared/lib/pages')
const modifyVueLoader = require('../vue-loader')
const WebpackHtmlAppendPlugin = require('../../packages/webpack-html-append-plugin')
const WebpackUniAppPlugin = require('../../packages/webpack-uni-app-loader/plugin/index')
function resolve (dir) {
return path.resolve(__dirname, '../../', dir)
}
const {
title,
publicPath,
template,
devServer
} = getH5Options()
const runtimePath = '@dcloudio/uni-mp-weixin/dist/mp.js'
const wxsPath = '@dcloudio/uni-mp-weixin/dist/wxs.js'
const uniCloudPath = path.resolve(__dirname, '../../packages/uni-cloud/dist/index.js')
function getProvides () {
return {
__f__: [path.resolve(__dirname, '../format-log.js'), 'log'],
uniCloud: [uniCloudPath, 'uniCloud'],
'wx.nextTick': [runtimePath, 'nextTick'],
Page: [runtimePath, 'Page'],
Component: [runtimePath, 'Component'],
Behavior: [runtimePath, 'Behavior'],
getDate: [wxsPath, 'getDate'],
getRegExp: [wxsPath, 'getRegExp']
}
}
const plugins = [
new WebpackUniAppPlugin(),
new webpack.ProvidePlugin(getProvides())
]
if (process.env.NODE_ENV !== 'production') {
plugins.push(new WebpackHtmlAppendPlugin(
`
<script>
${fs.readFileSync(path.resolve(__dirname, './auto-reload.js'), 'utf8')}
</script>
`
))
}
const vueConfig = {
parallel: false, // 因为传入了自定义 compiler,避免参数丢失,禁用parallel
publicPath,
pages: {
index: {
// page 的入口
entry: path.resolve(process.env.UNI_INPUT_DIR, getMainEntry()),
// 模板来源
template,
// 在 dist/index.html 的输出
filename: 'index.html',
// 当使用 title 选项时,
// template 中的 title 标签需要是 <title><%= htmlWebpackPlugin.options.title %></title>
title,
// 在这个页面中包含的块,默认情况下会包含
// 提取出来的通用 chunk 和 vendor chunk。
chunks: ['chunk-vendors', 'chunk-common', 'index'],
baseUrl: publicPath
}
}
}
if (devServer && Object.keys(devServer).length) {
vueConfig.devServer = devServer
}
module.exports = {
vueConfig,
webpackConfig (webpackConfig) {
let useBuiltIns = 'usage'
const statCode = getPlatformStat()
const pushCode = getPlatformPush()
const uniCloudCode = getPlatformUniCloud()
try {
const babelConfig = require(path.resolve(process.env.UNI_CLI_CONTEXT, 'babel.config.js'))
useBuiltIns = babelConfig.presets[0][1].useBuiltIns
} catch (e) {}
const beforeCode = (useBuiltIns === 'entry' ? 'import \'@babel/polyfill\';' : '') +
getDevUniConsoleCode() + `import 'uni-pages';import 'uni-${process.env.UNI_PLATFORM}';`
return {
resolve: {
extensions: ['.uts', '.nvue'],
alias: {
'vue-router': resolve('packages/h5-vue-router'),
'uni-h5': require.resolve('@dcloudio/uni-h5')
}
},
module: {
rules: [{
test: path.resolve(process.env.UNI_INPUT_DIR, getMainEntry()),
use: [{
loader: path.resolve(__dirname, '../../packages/wrap-loader'),
options: {
before: [
beforeCode + require('../util').getAutomatorCode() + statCode + pushCode + uniCloudCode +
getGlobalUsingComponentsCode()
]
}
}]
}, {
test: /App\.vue$/,
use: {
loader: path.resolve(__dirname, '../../packages/wrap-loader'),
options: {
before: ['<template><App :keepAliveInclude="keepAliveInclude"/></template>']
}
}
}, { // 解析组件,css 等
resourceQuery: /vue&type=script/,
use: [{
loader: path.resolve(__dirname,
'../../packages/webpack-uni-app-loader/using-components')
}]
}, {
resourceQuery: /vue&type=template/,
use: [{
loader: resolve('packages/webpack-uni-app-loader/filter-modules-template.js')
}, {
loader: '@dcloudio/vue-cli-plugin-uni/packages/webpack-uni-app-loader/page-meta'
}]
}, {
resourceQuery: [/lang=wxs/, /blockType=wxs/],
use: [{
loader: resolve('packages/webpack-uni-filter-loader')
}]
}]
},
resolveLoader: {
alias: {
'vue-style-loader': resolve('packages/h5-vue-style-loader')
}
},
plugins,
optimization: {
moduleIds: webpack.version[0] > 4 ? 'deterministic' : 'hashed'
},
devServer: webpack.version[0] > 4 ? {
watchFiles: {
options: require('../util').getWatchOptions()
}
} : {
watchOptions: require('../util').getWatchOptions()
}
}
},
chainWebpack (webpackConfig, vueOptions, api) {
webpackConfig.plugins.delete('copy')
if (!process.env.UNI_OPT_PREFETCH) {
webpackConfig.plugins.delete('prefetch-index')
}
if (!process.env.UNI_OPT_PRELOAD) {
webpackConfig.plugins.delete('preload-index')
}
const compilerOptions = require('./compiler-options')
if (publicPath === './') {
compilerOptions.publicPath = publicPath
}
modifyVueLoader(webpackConfig, {
isH5: true,
hotReload: true
}, compilerOptions, api)
if (process.env.NODE_ENV === 'production') {
require('./cssnano-options')(webpackConfig)
}
}
}