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

wip(mp): support mp-qq

上级 c50973c7
import path from 'path'
import { EmittedAsset } from 'rollup'
import { isComponentTag, LINEFEED } from '@dcloudio/uni-shared'
import {
......@@ -10,6 +11,7 @@ import {
TemplateChildNode,
TransformContext,
} from '@vue/compiler-core'
import { normalizeMiniProgramFilename } from '../utils'
export interface MiniProgramCompilerOptions {
slot: {
......@@ -29,11 +31,29 @@ export interface MiniProgramFilterOptions {
code: string
}
type GenFilterFn = (filter: MiniProgramFilterOptions) => string | void
type GenFilterFn = (
filter: MiniProgramFilterOptions,
filename: string
) => string | void
const templateFilesCache = new Map<string, string>()
const templateFiltersCache = new Map<string, MiniProgramFilterOptions[]>()
function relativeFilterFilename(
filename: string,
filter: MiniProgramFilterOptions
) {
if (!filter.src) {
return ''
}
return (
'./' +
normalizeMiniProgramFilename(
path.relative(path.dirname(filename), filter.src)
)
)
}
export function findMiniProgramTemplateFiles(genFilter?: GenFilterFn) {
const files: Record<string, string> = Object.create(null)
templateFilesCache.forEach((code, filename) => {
......@@ -43,7 +63,11 @@ export function findMiniProgramTemplateFiles(genFilter?: GenFilterFn) {
const filters = getMiniProgramTemplateFilters(filename)
if (filters && filters.length) {
files[filename] =
filters.map((filter) => genFilter(filter)).join(LINEFEED) +
filters
.map((filter) =>
genFilter(filter, relativeFilterFilename(filename, filter))
)
.join(LINEFEED) +
LINEFEED +
code
} else {
......
......@@ -6,7 +6,11 @@
"output": {
"format": "cjs"
},
"external": ["@dcloudio/uni-cli-shared", "@dcloudio/uni-mp-vite"]
"external": [
"fs-extra",
"@dcloudio/uni-cli-shared",
"@dcloudio/uni-mp-vite"
]
},
{
"input": {
......
'use strict';
var uniCliShared = require('@dcloudio/uni-cli-shared');
var initMiniProgramPlugin = require('@dcloudio/uni-mp-vite');
var path = require('path');
var fs = require('fs-extra');
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var initMiniProgramPlugin__default = /*#__PURE__*/_interopDefaultLegacy(initMiniProgramPlugin);
var path__default = /*#__PURE__*/_interopDefaultLegacy(path);
var fs__default = /*#__PURE__*/_interopDefaultLegacy(fs);
var description = "项目配置文件。";
var packOptions = {
ignore: [
]
};
var setting = {
urlCheck: true,
es6: true,
postcss: false,
minified: false,
newFeature: true,
nodeModules: false
};
var compileType = "miniprogram";
var libVersion = "";
var appid = "touristappid";
var projectname = "";
var condition = {
search: {
current: -1,
list: [
]
},
conversation: {
current: -1,
list: [
]
},
game: {
current: -1,
list: [
]
},
miniprogram: {
current: -1,
list: [
]
}
};
var source = {
description: description,
packOptions: packOptions,
setting: setting,
compileType: compileType,
libVersion: libVersion,
appid: appid,
projectname: projectname,
condition: condition
};
let isFixed = false;
function fix2648(bundle) {
if (isFixed) {
return;
}
const appJsonAsset = bundle['app.json'];
if (!appJsonAsset) {
return;
}
try {
const { usingComponents } = JSON.parse(appJsonAsset.source.toString());
if (usingComponents && !Object.keys(usingComponents).length) {
fs__default["default"].outputFileSync(path__default["default"].resolve(process.env.UNI_OUTPUT_DIR, 'fix-2648.json'), `{"component":true}`);
fs__default["default"].outputFileSync(path__default["default"].resolve(process.env.UNI_OUTPUT_DIR, 'fix-2648.qml'), `<!-- https://github.com/dcloudio/uni-app/issues/2648 -->`);
fs__default["default"].outputFileSync(path__default["default"].resolve(process.env.UNI_OUTPUT_DIR, 'fix-2648.js'), `Component({})`);
}
isFixed = true;
}
catch (_a) { }
}
const uniMiniProgramWeixinPlugin = {
name: 'vite:uni-mp-qq',
config() {
return {
define: {
__VUE_CREATED_DEFERRED__: false,
},
};
},
writeBundle(_, bundle) {
fix2648(bundle);
},
};
const options = {
vite: {
inject: {
uni: [
uniCliShared.resolveBuiltIn('@dcloudio/uni-mp-qq/dist/uni.api.esm.js'),
'default',
],
},
alias: {
'uni-mp-runtime': uniCliShared.resolveBuiltIn('@dcloudio/uni-mp-qq/dist/uni.mp.esm.js'),
},
copyOptions: {
assets: ['wxcomponents'],
targets: [
{
src: ['custom-tab-bar'],
get dest() {
return process.env.UNI_OUTPUT_DIR;
},
},
],
},
},
global: 'qq',
app: {
darkmode: true,
subpackages: true,
},
project: {
filename: 'project.config.json',
source,
},
template: {
filter: {
extname: '.qs',
lang: 'wxs',
generate(filter, filename) {
if (filename) {
return `<qs src="${filename}.qs" module="${filter.name}"/>`;
}
return `<qs module="${filter.name}">
${filter.code}
</qs>`;
},
},
slot: {
fallback: false,
},
extname: '.qml',
directive: 'qq:',
compilerOptions: {
nodeTransforms: [uniCliShared.addComponentBindLink],
},
},
style: {
extname: '.qss',
},
};
var index = [uniMiniProgramWeixinPlugin, ...initMiniProgramPlugin__default["default"](options)];
module.exports = index;
......@@ -14,7 +14,9 @@
"license": "Apache-2.0",
"uni-app": {
"name": "mp-qq",
"title": "QQ小程序"
"title": "QQ小程序",
"apply": "mp-qq",
"main": "dist/uni.compiler.js"
},
"gitHead": "1efa8efd0a9eddeabdba75c020d015ebf31b8177"
}
import path from 'path'
import fs from 'fs-extra'
import { OutputAsset, OutputBundle } from 'rollup'
let isFixed = false
export function fix2648(bundle: OutputBundle) {
if (isFixed) {
return
}
const appJsonAsset = bundle['app.json'] as OutputAsset
if (!appJsonAsset) {
return
}
try {
const { usingComponents } = JSON.parse(appJsonAsset.source.toString()) as {
usingComponents?: Record<string, string>
}
if (usingComponents && !Object.keys(usingComponents).length) {
fs.outputFileSync(
path.resolve(process.env.UNI_OUTPUT_DIR, 'fix-2648.json'),
`{"component":true}`
)
fs.outputFileSync(
path.resolve(process.env.UNI_OUTPUT_DIR, 'fix-2648.qml'),
`<!-- https://github.com/dcloudio/uni-app/issues/2648 -->`
)
fs.outputFileSync(
path.resolve(process.env.UNI_OUTPUT_DIR, 'fix-2648.js'),
`Component({})`
)
}
isFixed = true
} catch {}
}
import { Plugin } from 'vite'
import { addComponentBindLink, resolveBuiltIn } from '@dcloudio/uni-cli-shared'
import initMiniProgramPlugin, {
UniMiniProgramPluginOptions,
} from '@dcloudio/uni-mp-vite'
import source from './project.config.json'
import { fix2648 } from './fix2648'
const uniMiniProgramWeixinPlugin: Plugin = {
name: 'vite:uni-mp-qq',
config() {
return {
define: {
__VUE_CREATED_DEFERRED__: false,
},
}
},
writeBundle(_, bundle) {
fix2648(bundle)
},
}
const options: UniMiniProgramPluginOptions = {
vite: {
inject: {
uni: [
resolveBuiltIn('@dcloudio/uni-mp-qq/dist/uni.api.esm.js'),
'default',
],
},
alias: {
'uni-mp-runtime': resolveBuiltIn(
'@dcloudio/uni-mp-qq/dist/uni.mp.esm.js'
),
},
copyOptions: {
assets: ['wxcomponents'],
targets: [
{
src: ['custom-tab-bar'],
get dest() {
return process.env.UNI_OUTPUT_DIR
},
},
],
},
},
global: 'qq',
app: {
darkmode: true,
subpackages: true,
},
project: {
filename: 'project.config.json',
source,
},
template: {
filter: {
extname: '.qs',
lang: 'wxs',
generate(filter, filename) {
if (filename) {
return `<qs src="${filename}.qs" module="${filter.name}"/>`
}
return `<qs module="${filter.name}">
${filter.code}
</qs>`
},
},
slot: {
fallback: false,
},
extname: '.qml',
directive: 'qq:',
compilerOptions: {
nodeTransforms: [addComponentBindLink],
},
},
style: {
extname: '.qss',
},
}
export default [uniMiniProgramWeixinPlugin, ...initMiniProgramPlugin(options)]
{
"description": "项目配置文件。",
"packOptions": {
"ignore": []
},
"setting": {
"urlCheck": true,
"es6": true,
"postcss": false,
"minified": false,
"newFeature": true,
"nodeModules": false
},
"compileType": "miniprogram",
"libVersion": "",
"appid": "touristappid",
"projectname": "",
"condition": {
"search": {
"current": -1,
"list": []
},
"conversation": {
"current": -1,
"list": []
},
"game": {
"current": -1,
"list": []
},
"miniprogram": {
"current": -1,
"list": []
}
}
}
......@@ -31,7 +31,7 @@ export function buildOptions(): UserConfig['build'] {
}
return {
// sourcemap: 'inline', // TODO
target: ['chrome53'],
// target: ['chrome53'], // 由小程序自己启用 es6 编译
emptyOutDir: false, // 不清空输出目录,否则会影响自定义的一些文件输出,比如wxml
assetsInlineLimit: 40 * 1024, // 40kb
lib: {
......
......@@ -67,7 +67,7 @@ export function createConfigResolved({
const normalized = normalizePath(filename)
if (nvueCssPaths.find((pageCssPath) => pageCssPath === normalized)) {
debugNVueCss(normalized)
return `@import "/nvue.wxss";\n` + cssCode
return `@import "/nvue${extname}";\n` + cssCode
}
return cssCode
},
......
......@@ -14,7 +14,7 @@ var packOptions = {
};
var setting = {
urlCheck: true,
es6: false,
es6: true,
postcss: false,
minified: false,
newFeature: true
......@@ -110,9 +110,9 @@ const options = {
filter: {
extname: '.wxs',
lang: 'wxs',
generate(filter) {
if (filter.src) {
return `<wxs src="/${filter.src}.wxs" module="${filter.name}"/>`;
generate(filter, filename) {
if (filename) {
return `<wxs src="${filename}.wxs" module="${filter.name}"/>`;
}
return `<wxs module="${filter.name}">
${filter.code}
......
......@@ -64,9 +64,9 @@ const options: UniMiniProgramPluginOptions = {
filter: {
extname: '.wxs',
lang: 'wxs',
generate(filter) {
if (filter.src) {
return `<wxs src="/${filter.src}.wxs" module="${filter.name}"/>`
generate(filter, filename) {
if (filename) {
return `<wxs src="${filename}.wxs" module="${filter.name}"/>`
}
return `<wxs module="${filter.name}">
${filter.code}
......
......@@ -5,7 +5,7 @@
},
"setting": {
"urlCheck": true,
"es6": false,
"es6": true,
"postcss": false,
"minified": false,
"newFeature": true
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册