提交 cf107fa8 编写于 作者: fxy060608's avatar fxy060608

wip(app): nvue

上级 4ef3587d
import { compileTemplate } from '@vue/compiler-sfc'
import { uniAppPlugin } from '../../../uni-app-vite/src/vue/plugin'
import { uniAppPlugin } from '../../../uni-app-vite/src/plugin'
import {
ref,
nextTick,
......
import { initVuePlugins } from './vue'
import { initNVuePlugins } from './nvue'
import { uniAppPlugin } from './plugin'
export default () => {
return process.env.UNI_COMPILER === 'nvue'
? initNVuePlugins()
: initVuePlugins()
return [
uniAppPlugin(),
...(process.env.UNI_COMPILER === 'nvue'
? initNVuePlugins()
: initVuePlugins()),
]
}
import { uniNVuePlugin } from './plugin'
import {
initAppProvide,
uniHBuilderXConsolePlugin,
uniViteInjectPlugin,
UNI_EASYCOM_EXCLUDE,
} from '@dcloudio/uni-cli-shared'
import { uniAppNVuePlugin } from './plugin'
import { uniEasycomPlugin } from '../plugins/easycom'
export function initNVuePlugins() {
return [uniNVuePlugin()]
return [
uniEasycomPlugin({ exclude: UNI_EASYCOM_EXCLUDE }),
uniHBuilderXConsolePlugin(),
uniViteInjectPlugin('uni:app-inject', initAppProvide()),
uniAppNVuePlugin(),
]
}
import path from 'path'
import { Plugin } from 'vite'
export function uniNVuePlugin(): Plugin {
export function uniAppNVuePlugin(): Plugin {
return {
name: 'uni:app-nvue',
config() {
......
......@@ -4,9 +4,8 @@ import { ConfigEnv, UserConfig } from 'vite'
import {
emptyDir,
isInHybridNVue,
normalizePath,
resolveMainPathOnce,
APP_SERVICE_FILENAME,
} from '@dcloudio/uni-cli-shared'
export function buildOptions(
......@@ -16,8 +15,10 @@ export function buildOptions(
const inputDir = process.env.UNI_INPUT_DIR
const outputDir = process.env.UNI_OUTPUT_DIR
// 开始编译时,清空输出目录
if (fs.existsSync(outputDir)) {
emptyDir(outputDir)
if (!isInHybridNVue(userConfig)) {
if (fs.existsSync(outputDir)) {
emptyDir(outputDir)
}
}
return {
// App 端目前仅提供 inline
......@@ -25,15 +26,8 @@ export function buildOptions(
emptyOutDir: false, // 不清空输出目录,否则会影响 webpack 的输出
assetsInlineLimit: 0,
rollupOptions: {
input: resolveMainPathOnce(inputDir),
external: ['vue'],
output: {
name: 'AppService',
format: process.env.UNI_APP_CODE_SPLITING ? 'amd' : 'iife',
amd: {
autoId: true,
},
entryFileNames: APP_SERVICE_FILENAME,
sourcemapPathTransform(relativeSourcePath, sourcemapPath) {
const sourcePath = normalizePath(
path.relative(
......
import { UniVitePlugin } from '@dcloudio/uni-cli-shared'
import { uniOptions } from './uni'
import { buildOptions } from './build'
export function uniAppPlugin(): UniVitePlugin {
return {
name: 'uni:app',
uni: uniOptions(),
config(config, env) {
return {
build: buildOptions(config, env),
}
},
}
}
......@@ -41,7 +41,7 @@ export function uniManifestJsonPlugin(): Plugin {
})
return {
code: '',
map: this.getCombinedSourcemap(),
map: null,
}
},
}
......
import debug from 'debug'
import { Plugin } from 'vite'
import { resolveBuiltIn } from '@dcloudio/uni-cli-shared'
const debugResolve = debug('uni:app-resolve-id')
export function uniResolveIdPlugin(): Plugin {
const resolveCache: Record<string, string> = {}
return {
name: 'uni:app-resolve-id',
enforce: 'pre',
configResolved() {
resolveCache['@dcloudio/uni-app-vue'] = resolveBuiltIn(
'@dcloudio/uni-app-vue'
)
},
resolveId(id) {
if (id === 'vue') {
id = '@dcloudio/uni-app-vue'
}
const cache = resolveCache[id]
if (cache) {
debugResolve('cache', id, cache)
return cache
}
},
}
}
import path from 'path'
import fs from 'fs-extra'
import { Plugin } from 'vite'
import { OutputBundle } from 'rollup'
import { parsePagesJsonOnce } from '@dcloudio/uni-cli-shared'
import { APP_RENDERJS_JS, APP_WXS_JS } from './renderjs'
function genViewHtml(bundle: OutputBundle) {
const viewHtmlStr = fs.readFileSync(
path.resolve(__dirname, '../../lib/template/__uniappview.html'),
'utf8'
)
const { globalStyle } = parsePagesJsonOnce(
process.env.UNI_INPUT_DIR,
process.env.UNI_PLATFORM
)
const __uniConfig = {
globalStyle: {
rpxCalcMaxDeviceWidth: (globalStyle as any).rpxCalcMaxDeviceWidth,
rpxCalcBaseDeviceWidth: (globalStyle as any).rpxCalcBaseDeviceWidth,
},
}
const wxsCode = bundle[APP_WXS_JS]
? `<script src="${APP_WXS_JS}"></script>`
: ''
const renderjsCode = bundle[APP_RENDERJS_JS]
? `<script src="${APP_RENDERJS_JS}"></script>`
: ''
const automatorCode = process.env.UNI_AUTOMATOR_WS_ENDPOINT
? `<script src="__uniappautomator.js"></script>`
: ''
return viewHtmlStr
.toString()
.replace('<!--wxsCode-->', wxsCode)
.replace('<!--renderjsCode-->', renderjsCode)
.replace('<!--automatorCode-->', automatorCode)
.replace(
'/*__uniConfig*/',
`var __uniConfig = ${JSON.stringify(__uniConfig)}`
)
}
import { templateDir } from '../utils'
export function uniTemplatePlugin(): Plugin {
let outputDir: string
......@@ -56,19 +17,12 @@ export function uniTemplatePlugin(): Plugin {
overwrite: true,
}
)
fs.copySync(path.resolve(__dirname, '../../lib/template/'), outputDir, {
fs.copySync(templateDir, outputDir, {
overwrite: true,
filter(src) {
return !src.includes('__uniappview.html')
},
})
},
generateBundle(_, bundle) {
this.emitFile({
fileName: '__uniappview.html',
source: genViewHtml(bundle),
type: 'asset',
})
},
}
}
import path from 'path'
export const templateDir = path.resolve(__dirname, '../lib/template/')
......@@ -9,15 +9,16 @@ import {
isVueSfcFile,
isUniPageFile,
} from '@dcloudio/uni-cli-shared'
import { uniAppPlugin } from '../vue/plugin'
import { uniTemplatePlugin } from '../plugins/template'
import { uniMainJsPlugin } from '../plugins/mainJs'
import { uniManifestJsonPlugin } from '../plugins/manifestJson'
import { uniPagesJsonPlugin } from '../plugins/pagesJson'
import { uniRenderjsPlugin } from '../plugins/renderjs'
import { uniStatsPlugin } from '../plugins/stats'
import { uniEasycomPlugin } from '../plugins/easycom'
import { uniConfusionPlugin } from '../plugins/confusion'
import { uniConfusionPlugin } from './plugins/confusion'
import { uniMainJsPlugin } from './plugins/mainJs'
import { uniPagesJsonPlugin } from './plugins/pagesJson'
import { uniRenderjsPlugin } from './plugins/renderjs'
import { uniAppVuePlugin } from './plugin'
function initUniCssScopedPluginFilter(
inputDir: string
......@@ -46,7 +47,7 @@ export function initVuePlugins() {
uniRenderjsPlugin(),
uniTemplatePlugin(),
uniStatsPlugin(),
uniAppPlugin(),
uniAppVuePlugin(),
uniConfusionPlugin(),
]
const filter = initUniCssScopedPluginFilter(process.env.UNI_INPUT_DIR)
......
import { UniVitePlugin } from '@dcloudio/uni-cli-shared'
import path from 'path'
import fs from 'fs-extra'
import {
APP_SERVICE_FILENAME,
resolveMainPathOnce,
parsePagesJsonOnce,
UniVitePlugin,
} from '@dcloudio/uni-cli-shared'
import { OutputBundle } from 'rollup'
import { APP_RENDERJS_JS, APP_WXS_JS } from '../plugins/renderjs'
import { uniOptions } from './uni'
import { buildOptions } from './build'
import { configResolved } from './configResolved'
import { templateDir } from '../../utils'
export function uniAppPlugin(): UniVitePlugin {
export function uniAppVuePlugin(): UniVitePlugin {
const inputDir = process.env.UNI_INPUT_DIR
return {
name: 'uni:app',
uni: uniOptions(),
config(config, env) {
name: 'uni:app-vue',
config() {
return {
build: buildOptions(config, env),
build: {
rollupOptions: {
input: resolveMainPathOnce(inputDir),
output: {
name: 'AppService',
format: process.env.UNI_APP_CODE_SPLITING ? 'amd' : 'iife',
amd: {
autoId: true,
},
entryFileNames: APP_SERVICE_FILENAME,
},
},
},
}
},
configResolved,
generateBundle(_, bundle) {
this.emitFile({
fileName: '__uniappview.html',
source: genViewHtml(bundle),
type: 'asset',
})
},
}
}
function genViewHtml(bundle: OutputBundle) {
const viewHtmlStr = fs.readFileSync(
path.join(templateDir, '__uniappview.html'),
'utf8'
)
const { globalStyle } = parsePagesJsonOnce(
process.env.UNI_INPUT_DIR,
process.env.UNI_PLATFORM
)
const __uniConfig = {
globalStyle: {
rpxCalcMaxDeviceWidth: (globalStyle as any).rpxCalcMaxDeviceWidth,
rpxCalcBaseDeviceWidth: (globalStyle as any).rpxCalcBaseDeviceWidth,
},
}
const wxsCode = bundle[APP_WXS_JS]
? `<script src="${APP_WXS_JS}"></script>`
: ''
const renderjsCode = bundle[APP_RENDERJS_JS]
? `<script src="${APP_RENDERJS_JS}"></script>`
: ''
const automatorCode = process.env.UNI_AUTOMATOR_WS_ENDPOINT
? `<script src="__uniappautomator.js"></script>`
: ''
return viewHtmlStr
.toString()
.replace('<!--wxsCode-->', wxsCode)
.replace('<!--renderjsCode-->', renderjsCode)
.replace('<!--automatorCode-->', automatorCode)
.replace(
'/*__uniConfig*/',
`var __uniConfig = ${JSON.stringify(__uniConfig)}`
)
}
......@@ -14,7 +14,7 @@ export function uniConfusionPlugin(): Plugin {
const hasConfusion =
process.env.NODE_ENV === 'production' && hasConfusionFile(inputDir)
return {
name: 'uni:app-confusion',
name: 'uni:app-vue-confusion',
enforce: 'post',
apply: 'build',
config() {
......
......@@ -9636,6 +9636,7 @@ function useMovableViewState(props2, trigger, rootRef) {
}
}
function __handleTouchMove(event) {
event.stopPropagation();
if (!_isScaling && !props2.disabled && _isTouching) {
let x = _translateX;
let y = _translateY;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册