提交 95bf60f7 编写于 作者: Q qiang

Merge branch 'dev' into alpha

...@@ -85,8 +85,7 @@ function getH5Options (manifestJson) { ...@@ -85,8 +85,7 @@ function getH5Options (manifestJson) {
} }
/* eslint-disable no-mixed-operators */ /* eslint-disable no-mixed-operators */
h5.template = h5.template && path.resolve(process.env.UNI_INPUT_DIR, h5.template) || path.resolve(__dirname, h5.template = h5.template && path.resolve(process.env.UNI_INPUT_DIR, h5.template) || path.resolve(require('./util').getCLIContext(), 'public/index.html')
'../../../../public/index.html')
h5.devServer = h5.devServer || {} h5.devServer = h5.devServer || {}
...@@ -103,4 +102,4 @@ module.exports = { ...@@ -103,4 +102,4 @@ module.exports = {
parseManifestJson, parseManifestJson,
getNetworkTimeout, getNetworkTimeout,
getH5Options getH5Options
} }
...@@ -14,6 +14,24 @@ try { ...@@ -14,6 +14,24 @@ try {
const isInHBuilderX = !!aboutPkg const isInHBuilderX = !!aboutPkg
const isInHBuilderXAlpha = !!(isInHBuilderX && aboutPkg.alpha) const isInHBuilderXAlpha = !!(isInHBuilderX && aboutPkg.alpha)
function getCLIContext () {
var context = path.resolve(__dirname, '../../../../')
// const isInHBuilderX = fs.existsSync(path.resolve(context, 'bin/uniapp-cli.js'))
if (isInHBuilderX) {
return context
}
const pnpmFind = __dirname.match(/.+?[\/\\].pnpm[\/\\]/)
if (pnpmFind) {
const pnpm = pnpmFind[0]
context = path.resolve(pnpm, '../../')
}
const isInCLI = fs.existsSync(path.resolve(context, './src'))
if (isInCLI) {
return context
}
return process.cwd()
}
function removeExt (str, ext) { function removeExt (str, ext) {
if (ext) { if (ext) {
const reg = new RegExp(ext.replace(/\./, '\\.') + '$') const reg = new RegExp(ext.replace(/\./, '\\.') + '$')
...@@ -105,6 +123,7 @@ const _hasOwnProperty = Object.prototype.hasOwnProperty ...@@ -105,6 +123,7 @@ const _hasOwnProperty = Object.prototype.hasOwnProperty
module.exports = { module.exports = {
isInHBuilderX, isInHBuilderX,
isInHBuilderXAlpha, isInHBuilderXAlpha,
getCLIContext,
normalizeNodeModules, normalizeNodeModules,
md5, md5,
hasOwn (obj, key) { hasOwn (obj, key) {
......
import Vue from 'vue'; import Vue from 'vue';
import { initVueI18n } from '@dcloudio/uni-i18n'; import { initVueI18n } from '@dcloudio/uni-i18n';
let realAtob; let realAtob;
const b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; const b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
const b64re = /^(?:[A-Za-z\d+/]{4})*?(?:[A-Za-z\d+/]{2}(?:==)?|[A-Za-z\d+/]{3}=?)?$/; const b64re = /^(?:[A-Za-z\d+/]{4})*?(?:[A-Za-z\d+/]{2}(?:==)?|[A-Za-z\d+/]{3}=?)?$/;
if (typeof atob !== 'function') { if (typeof atob !== 'function') {
realAtob = function (str) { realAtob = function (str) {
str = String(str).replace(/[\t\n\f\r ]+/g, ''); str = String(str).replace(/[\t\n\f\r ]+/g, '');
if (!b64re.test(str)) { throw new Error("Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.") } if (!b64re.test(str)) { throw new Error("Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.") }
// Adding the padding if missing, for semplicity // Adding the padding if missing, for semplicity
str += '=='.slice(2 - (str.length & 3)); str += '=='.slice(2 - (str.length & 3));
var bitmap; var result = ''; var r1; var r2; var i = 0; var bitmap; var result = ''; var r1; var r2; var i = 0;
for (; i < str.length;) { for (; i < str.length;) {
bitmap = b64.indexOf(str.charAt(i++)) << 18 | b64.indexOf(str.charAt(i++)) << 12 | bitmap = b64.indexOf(str.charAt(i++)) << 18 | b64.indexOf(str.charAt(i++)) << 12 |
(r1 = b64.indexOf(str.charAt(i++))) << 6 | (r2 = b64.indexOf(str.charAt(i++))); (r1 = b64.indexOf(str.charAt(i++))) << 6 | (r2 = b64.indexOf(str.charAt(i++)));
result += r1 === 64 ? String.fromCharCode(bitmap >> 16 & 255) result += r1 === 64 ? String.fromCharCode(bitmap >> 16 & 255)
: r2 === 64 ? String.fromCharCode(bitmap >> 16 & 255, bitmap >> 8 & 255) : r2 === 64 ? String.fromCharCode(bitmap >> 16 & 255, bitmap >> 8 & 255)
: String.fromCharCode(bitmap >> 16 & 255, bitmap >> 8 & 255, bitmap & 255); : String.fromCharCode(bitmap >> 16 & 255, bitmap >> 8 & 255, bitmap & 255);
} }
return result return result
}; };
} else { } else {
// 注意atob只能在全局对象上调用,例如:`const Base64 = {atob};Base64.atob('xxxx')`是错误的用法 // 注意atob只能在全局对象上调用,例如:`const Base64 = {atob};Base64.atob('xxxx')`是错误的用法
realAtob = atob; realAtob = atob;
} }
function b64DecodeUnicode (str) { function b64DecodeUnicode (str) {
return decodeURIComponent(realAtob(str).split('').map(function (c) { return decodeURIComponent(realAtob(str).split('').map(function (c) {
return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2) return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2)
}).join('')) }).join(''))
} }
function getCurrentUserInfo () { function getCurrentUserInfo () {
const token = ( wx).getStorageSync('uni_id_token') || ''; const token = ( wx).getStorageSync('uni_id_token') || '';
const tokenArr = token.split('.'); const tokenArr = token.split('.');
if (!token || tokenArr.length !== 3) { if (!token || tokenArr.length !== 3) {
return { return {
uid: null, uid: null,
role: [], role: [],
permission: [], permission: [],
tokenExpired: 0 tokenExpired: 0
} }
} }
let userInfo; let userInfo;
try { try {
userInfo = JSON.parse(b64DecodeUnicode(tokenArr[1])); userInfo = JSON.parse(b64DecodeUnicode(tokenArr[1]));
} catch (error) { } catch (error) {
throw new Error('获取当前用户信息出错,详细错误信息为:' + error.message) throw new Error('获取当前用户信息出错,详细错误信息为:' + error.message)
} }
userInfo.tokenExpired = userInfo.exp * 1000; userInfo.tokenExpired = userInfo.exp * 1000;
delete userInfo.exp; delete userInfo.exp;
delete userInfo.iat; delete userInfo.iat;
return userInfo return userInfo
} }
function uniIdMixin (Vue) { function uniIdMixin (Vue) {
Vue.prototype.uniIDHasRole = function (roleId) { Vue.prototype.uniIDHasRole = function (roleId) {
const { const {
role role
} = getCurrentUserInfo(); } = getCurrentUserInfo();
return role.indexOf(roleId) > -1 return role.indexOf(roleId) > -1
}; };
Vue.prototype.uniIDHasPermission = function (permissionId) { Vue.prototype.uniIDHasPermission = function (permissionId) {
const { const {
permission permission
} = getCurrentUserInfo(); } = getCurrentUserInfo();
return this.uniIDHasRole('admin') || permission.indexOf(permissionId) > -1 return this.uniIDHasRole('admin') || permission.indexOf(permissionId) > -1
}; };
Vue.prototype.uniIDTokenValid = function () { Vue.prototype.uniIDTokenValid = function () {
const { const {
tokenExpired tokenExpired
} = getCurrentUserInfo(); } = getCurrentUserInfo();
return tokenExpired > Date.now() return tokenExpired > Date.now()
}; };
} }
const _toString = Object.prototype.toString; const _toString = Object.prototype.toString;
...@@ -546,37 +546,37 @@ var previewImage = { ...@@ -546,37 +546,37 @@ var previewImage = {
} }
}; };
const UUID_KEY = '__DC_STAT_UUID'; const UUID_KEY = '__DC_STAT_UUID';
let deviceId; let deviceId;
function addUuid (result) { function addUuid (result) {
deviceId = deviceId || wx.getStorageSync(UUID_KEY); deviceId = deviceId || wx.getStorageSync(UUID_KEY);
if (!deviceId) { if (!deviceId) {
deviceId = Date.now() + '' + Math.floor(Math.random() * 1e7); deviceId = Date.now() + '' + Math.floor(Math.random() * 1e7);
wx.setStorage({ wx.setStorage({
key: UUID_KEY, key: UUID_KEY,
data: deviceId data: deviceId
}); });
} }
result.deviceId = deviceId; result.deviceId = deviceId;
} }
function addSafeAreaInsets (result) { function addSafeAreaInsets (result) {
if (result.safeArea) { if (result.safeArea) {
const safeArea = result.safeArea; const safeArea = result.safeArea;
result.safeAreaInsets = { result.safeAreaInsets = {
top: safeArea.top, top: safeArea.top,
left: safeArea.left, left: safeArea.left,
right: result.windowWidth - safeArea.right, right: result.windowWidth - safeArea.right,
bottom: result.windowHeight - safeArea.bottom bottom: result.windowHeight - safeArea.bottom
}; };
} }
} }
var getSystemInfo = { var getSystemInfo = {
returnValue: function (result) { returnValue: function (result) {
addUuid(result); addUuid(result);
addSafeAreaInsets(result); addSafeAreaInsets(result);
} }
}; };
// import navigateTo from 'uni-helpers/navigate-to' // import navigateTo from 'uni-helpers/navigate-to'
...@@ -794,11 +794,6 @@ const customize = cached((str) => { ...@@ -794,11 +794,6 @@ const customize = cached((str) => {
}); });
function initTriggerEvent (mpInstance) { function initTriggerEvent (mpInstance) {
{
if (!wx.canIUse || !wx.canIUse('nextTick')) {
return
}
}
const oldTriggerEvent = mpInstance.triggerEvent; const oldTriggerEvent = mpInstance.triggerEvent;
mpInstance.triggerEvent = function (event, ...args) { mpInstance.triggerEvent = function (event, ...args) {
return oldTriggerEvent.apply(mpInstance, [customize(event), ...args]) return oldTriggerEvent.apply(mpInstance, [customize(event), ...args])
...@@ -1436,172 +1431,172 @@ function getEventChannel (id) { ...@@ -1436,172 +1431,172 @@ function getEventChannel (id) {
return eventChannelStack.shift() return eventChannelStack.shift()
} }
const hooks = [ const hooks = [
'onShow', 'onShow',
'onHide', 'onHide',
'onError', 'onError',
'onPageNotFound', 'onPageNotFound',
'onThemeChange', 'onThemeChange',
'onUnhandledRejection' 'onUnhandledRejection'
]; ];
function initEventChannel () { function initEventChannel () {
Vue.prototype.getOpenerEventChannel = function () { Vue.prototype.getOpenerEventChannel = function () {
// 微信小程序使用自身getOpenerEventChannel // 微信小程序使用自身getOpenerEventChannel
{ {
return this.$scope.getOpenerEventChannel() return this.$scope.getOpenerEventChannel()
} }
}; };
const callHook = Vue.prototype.__call_hook; const callHook = Vue.prototype.__call_hook;
Vue.prototype.__call_hook = function (hook, args) { Vue.prototype.__call_hook = function (hook, args) {
if (hook === 'onLoad' && args && args.__id__) { if (hook === 'onLoad' && args && args.__id__) {
this.__eventChannel__ = getEventChannel(args.__id__); this.__eventChannel__ = getEventChannel(args.__id__);
delete args.__id__; delete args.__id__;
} }
return callHook.call(this, hook, args) return callHook.call(this, hook, args)
}; };
} }
function initScopedSlotsParams () { function initScopedSlotsParams () {
const center = {}; const center = {};
const parents = {}; const parents = {};
Vue.prototype.$hasScopedSlotsParams = function (vueId) { Vue.prototype.$hasScopedSlotsParams = function (vueId) {
const has = center[vueId]; const has = center[vueId];
if (!has) { if (!has) {
parents[vueId] = this; parents[vueId] = this;
this.$on('hook:destory', () => { this.$on('hook:destory', () => {
delete parents[vueId]; delete parents[vueId];
}); });
} }
return has return has
}; };
Vue.prototype.$getScopedSlotsParams = function (vueId, name, key) { Vue.prototype.$getScopedSlotsParams = function (vueId, name, key) {
const data = center[vueId]; const data = center[vueId];
if (data) { if (data) {
const object = data[name] || {}; const object = data[name] || {};
return key ? object[key] : object return key ? object[key] : object
} else { } else {
parents[vueId] = this; parents[vueId] = this;
this.$on('hook:destory', () => { this.$on('hook:destory', () => {
delete parents[vueId]; delete parents[vueId];
}); });
} }
}; };
Vue.prototype.$setScopedSlotsParams = function (name, value) { Vue.prototype.$setScopedSlotsParams = function (name, value) {
const vueIds = this.$options.propsData.vueId; const vueIds = this.$options.propsData.vueId;
if (vueIds) { if (vueIds) {
const vueId = vueIds.split(',')[0]; const vueId = vueIds.split(',')[0];
const object = center[vueId] = center[vueId] || {}; const object = center[vueId] = center[vueId] || {};
object[name] = value; object[name] = value;
if (parents[vueId]) { if (parents[vueId]) {
parents[vueId].$forceUpdate(); parents[vueId].$forceUpdate();
} }
} }
}; };
Vue.mixin({ Vue.mixin({
destroyed () { destroyed () {
const propsData = this.$options.propsData; const propsData = this.$options.propsData;
const vueId = propsData && propsData.vueId; const vueId = propsData && propsData.vueId;
if (vueId) { if (vueId) {
delete center[vueId]; delete center[vueId];
delete parents[vueId]; delete parents[vueId];
} }
} }
}); });
} }
function parseBaseApp (vm, { function parseBaseApp (vm, {
mocks, mocks,
initRefs initRefs
}) { }) {
initEventChannel(); initEventChannel();
{ {
initScopedSlotsParams(); initScopedSlotsParams();
} }
if (vm.$options.store) { if (vm.$options.store) {
Vue.prototype.$store = vm.$options.store; Vue.prototype.$store = vm.$options.store;
} }
uniIdMixin(Vue); uniIdMixin(Vue);
Vue.prototype.mpHost = "mp-weixin"; Vue.prototype.mpHost = "mp-weixin";
Vue.mixin({ Vue.mixin({
beforeCreate () { beforeCreate () {
if (!this.$options.mpType) { if (!this.$options.mpType) {
return return
} }
this.mpType = this.$options.mpType; this.mpType = this.$options.mpType;
this.$mp = { this.$mp = {
data: {}, data: {},
[this.mpType]: this.$options.mpInstance [this.mpType]: this.$options.mpInstance
}; };
this.$scope = this.$options.mpInstance; this.$scope = this.$options.mpInstance;
delete this.$options.mpType; delete this.$options.mpType;
delete this.$options.mpInstance; delete this.$options.mpInstance;
if (this.mpType === 'page' && typeof getApp === 'function') { // hack vue-i18n if (this.mpType === 'page' && typeof getApp === 'function') { // hack vue-i18n
const app = getApp(); const app = getApp();
if (app.$vm && app.$vm.$i18n) { if (app.$vm && app.$vm.$i18n) {
this._i18n = app.$vm.$i18n; this._i18n = app.$vm.$i18n;
} }
} }
if (this.mpType !== 'app') { if (this.mpType !== 'app') {
initRefs(this); initRefs(this);
initMocks(this, mocks); initMocks(this, mocks);
} }
} }
}); });
const appOptions = { const appOptions = {
onLaunch (args) { onLaunch (args) {
if (this.$vm) { // 已经初始化过了,主要是为了百度,百度 onShow 在 onLaunch 之前 if (this.$vm) { // 已经初始化过了,主要是为了百度,百度 onShow 在 onLaunch 之前
return return
} }
{ {
if (wx.canIUse && !wx.canIUse('nextTick')) { // 事实 上2.2.3 即可,简单使用 2.3.0 的 nextTick 判断 if (wx.canIUse && !wx.canIUse('nextTick')) { // 事实 上2.2.3 即可,简单使用 2.3.0 的 nextTick 判断
console.error('当前微信基础库版本过低,请将 微信开发者工具-详情-项目设置-调试基础库版本 更换为`2.3.0`以上'); console.error('当前微信基础库版本过低,请将 微信开发者工具-详情-项目设置-调试基础库版本 更换为`2.3.0`以上');
} }
} }
this.$vm = vm; this.$vm = vm;
this.$vm.$mp = { this.$vm.$mp = {
app: this app: this
}; };
this.$vm.$scope = this; this.$vm.$scope = this;
// vm 上也挂载 globalData // vm 上也挂载 globalData
this.$vm.globalData = this.globalData; this.$vm.globalData = this.globalData;
this.$vm._isMounted = true; this.$vm._isMounted = true;
this.$vm.__call_hook('mounted', args); this.$vm.__call_hook('mounted', args);
this.$vm.__call_hook('onLaunch', args); this.$vm.__call_hook('onLaunch', args);
} }
}; };
// 兼容旧版本 globalData // 兼容旧版本 globalData
appOptions.globalData = vm.$options.globalData || {}; appOptions.globalData = vm.$options.globalData || {};
// 将 methods 中的方法挂在 getApp() 中 // 将 methods 中的方法挂在 getApp() 中
const methods = vm.$options.methods; const methods = vm.$options.methods;
if (methods) { if (methods) {
Object.keys(methods).forEach(name => { Object.keys(methods).forEach(name => {
appOptions[name] = methods[name]; appOptions[name] = methods[name];
}); });
} }
initAppLocale(Vue, vm, wx.getSystemInfoSync().language || 'zh-Hans'); initAppLocale(Vue, vm, wx.getSystemInfoSync().language || 'zh-Hans');
initHooks(appOptions, hooks); initHooks(appOptions, hooks);
return appOptions return appOptions
} }
const mocks = ['__route__', '__wxExparserNodeId__', '__wxWebviewId__']; const mocks = ['__route__', '__wxExparserNodeId__', '__wxWebviewId__'];
...@@ -1937,23 +1932,23 @@ function createSubpackageApp (vm) { ...@@ -1937,23 +1932,23 @@ function createSubpackageApp (vm) {
return vm return vm
} }
function createPlugin (vm) { function createPlugin (vm) {
const appOptions = parseApp(vm); const appOptions = parseApp(vm);
if (isFn(appOptions.onShow) && wx.onAppShow) { if (isFn(appOptions.onShow) && wx.onAppShow) {
wx.onAppShow((...args) => { wx.onAppShow((...args) => {
appOptions.onShow.apply(vm, args); appOptions.onShow.apply(vm, args);
}); });
} }
if (isFn(appOptions.onHide) && wx.onAppHide) { if (isFn(appOptions.onHide) && wx.onAppHide) {
wx.onAppHide((...args) => { wx.onAppHide((...args) => {
appOptions.onHide.apply(vm, args); appOptions.onHide.apply(vm, args);
}); });
} }
if (isFn(appOptions.onLaunch)) { if (isFn(appOptions.onLaunch)) {
const args = wx.getLaunchOptionsSync && wx.getLaunchOptionsSync(); const args = wx.getLaunchOptionsSync && wx.getLaunchOptionsSync();
appOptions.onLaunch.call(vm, args); appOptions.onLaunch.call(vm, args);
} }
return vm return vm
} }
todos.forEach(todoApi => { todos.forEach(todoApi => {
......
...@@ -2,7 +2,7 @@ const fs = require('fs') ...@@ -2,7 +2,7 @@ const fs = require('fs')
const path = require('path') const path = require('path')
const uniI18n = require('@dcloudio/uni-cli-i18n') const uniI18n = require('@dcloudio/uni-cli-i18n')
process.env.UNI_CLI_CONTEXT = path.resolve(__dirname, '../../../') process.env.UNI_CLI_CONTEXT = require('@dcloudio/uni-cli-shared/lib/util').getCLIContext()
process.env.UNI_HBUILDERX_PLUGINS = process.env.UNI_HBUILDERX_PLUGINS || path.resolve(__dirname, '../../../../') process.env.UNI_HBUILDERX_PLUGINS = process.env.UNI_HBUILDERX_PLUGINS || path.resolve(__dirname, '../../../../')
......
...@@ -13,12 +13,14 @@ class Upate { ...@@ -13,12 +13,14 @@ class Upate {
this._isAlpha = false this._isAlpha = false
this._uniId = '' this._uniId = ''
this._appId = '' this._appId = ''
this._wt = 0
this._lc = ''
this._lcin = []
} }
get uniId () { get uniId () {
return this._uniId return this._uniId
} }
set uniId (value) { set uniId (value) {
this._uniId = value this._uniId = value
} }
...@@ -26,7 +28,6 @@ class Upate { ...@@ -26,7 +28,6 @@ class Upate {
get appId () { get appId () {
return this._appId return this._appId
} }
set appId (value) { set appId (value) {
this._appId = value this._appId = value
} }
...@@ -34,7 +35,6 @@ class Upate { ...@@ -34,7 +35,6 @@ class Upate {
get compilerVersion () { get compilerVersion () {
return this._compilerVersion return this._compilerVersion
} }
set compilerVersion (value) { set compilerVersion (value) {
this._compilerVersion = value this._compilerVersion = value
} }
...@@ -42,11 +42,31 @@ class Upate { ...@@ -42,11 +42,31 @@ class Upate {
get isAlpha () { get isAlpha () {
return this._isAlpha return this._isAlpha
} }
set isAlpha (value) { set isAlpha (value) {
this._isAlpha = value this._isAlpha = value
} }
get wt () {
return this._wt
}
set wt (value) {
this._wt = value
}
get lc () {
return this._lc
}
set lc (value) {
this._lc = value
}
get lcin () {
return this._lcin
}
set lcin (value) {
this._lcin = value
}
get versionType () { get versionType () {
return (this.isAlpha ? 'a' : 'r') return (this.isAlpha ? 'a' : 'r')
} }
...@@ -156,6 +176,9 @@ class Upate { ...@@ -156,6 +176,9 @@ class Upate {
data.appid = this.uniId data.appid = this.uniId
data.vtype = this.versionType data.vtype = this.versionType
data.vcode = this.compilerVersion data.vcode = this.compilerVersion
data.wt = this._wt
data.lc = this._lc
data.in = this._lcin
delete data.lastCheck delete data.lastCheck
...@@ -234,6 +257,28 @@ Object.assign(Upate.prototype, { ...@@ -234,6 +257,28 @@ Object.assign(Upate.prototype, {
DEFAULT_INTERVAL: 1000 * 60 * 60 * 24 DEFAULT_INTERVAL: 1000 * 60 * 60 * 24
}) })
function getLc() {
let result = []
const locale_dir = path.join(process.env.UNI_CLI_CONTEXT, 'src/locale')
if (!fs.existsSync(locale_dir)) {
return result
}
let files = fs.readdirSync(locale_dir)
for (let i = files.length - 1; i >= 0; i--) {
let filePath = files[i]
let extName = filePath.substring(filePath.lastIndexOf('.') + 1).toLowerCase()
if (extName !== 'json') {
continue
}
if (files[i].indexOf('uni-app.') < 0) {
result.push(filePath.substring(0, filePath.lastIndexOf('.')))
}
}
return result
}
module.exports = async function checkUpdate () { module.exports = async function checkUpdate () {
const { const {
isInHBuilderX, isInHBuilderX,
...@@ -255,6 +300,10 @@ module.exports = async function checkUpdate () { ...@@ -255,6 +300,10 @@ module.exports = async function checkUpdate () {
update.uniId = manifest.appid update.uniId = manifest.appid
const appIdKey = process.env.UNI_PLATFORM.includes('quickapp') ? 'package' : 'appid' const appIdKey = process.env.UNI_PLATFORM.includes('quickapp') ? 'package' : 'appid'
update.appId = manifest[process.env.UNI_PLATFORM] ? (manifest[process.env.UNI_PLATFORM][appIdKey] || '') : '' update.appId = manifest[process.env.UNI_PLATFORM] ? (manifest[process.env.UNI_PLATFORM][appIdKey] || '') : ''
const cf = manifest['mp-weixin'] ? manifest['mp-weixin']['cloudfunctionRoot'] : ''
update.wt = (cf && cf.length) ? 1 : 0
update.lc = manifest['locale'] ? manifest['locale'] : ''
update.lcin = getLc().join(',')
update.check() update.check()
} catch (e) { } catch (e) {
} }
......
...@@ -15,7 +15,7 @@ function resolve (dir) { ...@@ -15,7 +15,7 @@ function resolve (dir) {
} }
function resolveModule (dir) { function resolveModule (dir) {
return path.resolve(__dirname, '../../..', dir) return path.resolve(process.env.UNI_CLI_CONTEXT, './node_modules', dir)
} }
module.exports = function configureWebpack (platformOptions, manifestPlatformOptions, vueOptions, api) { module.exports = function configureWebpack (platformOptions, manifestPlatformOptions, vueOptions, api) {
...@@ -184,8 +184,9 @@ module.exports = function configureWebpack (platformOptions, manifestPlatformOpt ...@@ -184,8 +184,9 @@ module.exports = function configureWebpack (platformOptions, manifestPlatformOpt
platformWebpackConfig = platformWebpackConfig(webpackConfig, vueOptions, api) platformWebpackConfig = platformWebpackConfig(webpackConfig, vueOptions, api)
} }
// 移除 node_modules 目录,避免受路径上的 node_modules 影响 // 移除 node_modules 目录,避免受路径上的 node_modules 影响
webpackConfig.resolve.modules = webpackConfig.resolve.modules.filter(module => module !== if (require('@dcloudio/uni-cli-shared/lib/util').isInHBuilderX) {
'node_modules') webpackConfig.resolve.modules = webpackConfig.resolve.modules.filter(module => module !== 'node_modules')
}
const plugins = [] const plugins = []
...@@ -298,6 +299,17 @@ module.exports = function configureWebpack (platformOptions, manifestPlatformOpt ...@@ -298,6 +299,17 @@ module.exports = function configureWebpack (platformOptions, manifestPlatformOpt
} }
} catch (e) {} } catch (e) {}
const resolveLoaderAlias = {}
const modules = ['@vue/cli-plugin-babel', '@vue/cli-service']
modules.forEach(m => {
const { dependencies } = require(`${m}/package.json`)
Object.keys(dependencies).forEach(key => {
if (/-loader$/.test(key)) {
resolveLoaderAlias[key] = require.resolve(key)
}
})
})
return merge({ return merge({
devtool: false, devtool: false,
resolve: { resolve: {
...@@ -325,6 +337,9 @@ module.exports = function configureWebpack (platformOptions, manifestPlatformOpt ...@@ -325,6 +337,9 @@ module.exports = function configureWebpack (platformOptions, manifestPlatformOpt
noParse: /^(vue|vue-router|vuex|vuex-router-sync)$/, noParse: /^(vue|vue-router|vuex|vuex-router-sync)$/,
rules rules
}, },
resolveLoader: {
alias: resolveLoaderAlias
},
plugins, plugins,
performance: { performance: {
assetFilter (assetFilename) { assetFilter (assetFilename) {
...@@ -334,4 +349,4 @@ module.exports = function configureWebpack (platformOptions, manifestPlatformOpt ...@@ -334,4 +349,4 @@ module.exports = function configureWebpack (platformOptions, manifestPlatformOpt
watchOptions: require('./util').getWatchOptions() watchOptions: require('./util').getWatchOptions()
}, platformWebpackConfig) }, platformWebpackConfig)
} }
} }
...@@ -107,11 +107,13 @@ if (process.env.UNI_CLOUD_SPACES) { ...@@ -107,11 +107,13 @@ if (process.env.UNI_CLOUD_SPACES) {
} }
// 初始化环境变量 // 初始化环境变量
const defaultOutputDir = '../../../../dist/' + process.env.UNI_CLI_CONTEXT = require('@dcloudio/uni-cli-shared/lib/util').getCLIContext()
const defaultOutputDir = './dist/' +
(process.env.NODE_ENV === 'production' ? 'build' : 'dev') + '/' + (process.env.NODE_ENV === 'production' ? 'build' : 'dev') + '/' +
(process.env.UNI_SUB_PLATFORM || process.env.UNI_PLATFORM) (process.env.UNI_SUB_PLATFORM || process.env.UNI_PLATFORM)
process.env.UNI_OUTPUT_DEFAULT_DIR = path.resolve(__dirname, defaultOutputDir) process.env.UNI_OUTPUT_DEFAULT_DIR = path.resolve(process.env.UNI_CLI_CONTEXT, defaultOutputDir)
if (process.env.UNI_OUTPUT_DIR && process.env.UNI_OUTPUT_DIR.indexOf('./') === 0) { if (process.env.UNI_OUTPUT_DIR && process.env.UNI_OUTPUT_DIR.indexOf('./') === 0) {
process.env.UNI_OUTPUT_DIR = path.resolve(process.cwd(), process.env.UNI_OUTPUT_DIR) process.env.UNI_OUTPUT_DIR = path.resolve(process.cwd(), process.env.UNI_OUTPUT_DIR)
} }
...@@ -124,8 +126,6 @@ if (process.env.UNI_PLATFORM === 'app-plus') { ...@@ -124,8 +126,6 @@ if (process.env.UNI_PLATFORM === 'app-plus') {
process.env.UNI_OUTPUT_TMP_DIR = path.resolve(process.env.UNI_OUTPUT_DIR, '../.tmp/app-plus') process.env.UNI_OUTPUT_TMP_DIR = path.resolve(process.env.UNI_OUTPUT_DIR, '../.tmp/app-plus')
} }
process.env.UNI_CLI_CONTEXT = path.resolve(__dirname, '../../../../')
process.UNI_LIBRARIES = process.UNI_LIBRARIES || ['@dcloudio/uni-ui'] process.UNI_LIBRARIES = process.UNI_LIBRARIES || ['@dcloudio/uni-ui']
if (process.env.NODE_ENV === 'production') { // 发行模式,不启用 cache if (process.env.NODE_ENV === 'production') { // 发行模式,不启用 cache
......
...@@ -32,13 +32,22 @@ export default { ...@@ -32,13 +32,22 @@ export default {
}, },
methods: { methods: {
_renderNodes (nodes) { _renderNodes (nodes) {
let scopeId = ''
let $vm = this
while ($vm) {
!scopeId && (scopeId = $vm.$options._scopeId)
$vm = $vm.$parent
}
const hasItemClick = !!this.$listeners.itemclick
if (!this._isMounted) { if (!this._isMounted) {
return return
} }
if (typeof nodes === 'string') { if (typeof nodes === 'string') {
nodes = parseHtml(nodes) nodes = parseHtml(nodes)
} }
const nodeList = parseNodes(nodes, document.createDocumentFragment(), this) const nodeList = parseNodes(nodes, document.createDocumentFragment(), scopeId, hasItemClick && this.triggerItemClick)
nodeList.appendChild(this.$refs.sensor.$el) nodeList.appendChild(this.$refs.sensor.$el)
const content = this.$refs.content const content = this.$refs.content
content.innerHTML = '' content.innerHTML = ''
...@@ -46,6 +55,9 @@ export default { ...@@ -46,6 +55,9 @@ export default {
}, },
_updateView () { _updateView () {
window.dispatchEvent(new CustomEvent('updateview')) window.dispatchEvent(new CustomEvent('updateview'))
},
triggerItemClick (e, detail = {}) {
this.$trigger('itemclick', e, detail)
} }
} }
} }
......
...@@ -102,13 +102,7 @@ function normlizeValue (tagName, name, value) { ...@@ -102,13 +102,7 @@ function normlizeValue (tagName, name, value) {
return value return value
} }
export default function parseNodes (nodes, parentNode, $vm) { export default function parseNodes (nodes, parentNode, scopeId, triggerItemClick) {
let scopeId = ''
while ($vm) {
!scopeId && (scopeId = $vm.$options._scopeId)
$vm = $vm.$parent
}
nodes.forEach(function (node) { nodes.forEach(function (node) {
if (!isPlainObject(node)) { if (!isPlainObject(node)) {
return return
...@@ -146,9 +140,11 @@ export default function parseNodes (nodes, parentNode, $vm) { ...@@ -146,9 +140,11 @@ export default function parseNodes (nodes, parentNode, $vm) {
}) })
} }
processClickEvent(node, elem, triggerItemClick)
const children = node.children const children = node.children
if (Array.isArray(children) && children.length) { if (Array.isArray(children) && children.length) {
parseNodes(node.children, elem) parseNodes(node.children, elem, scopeId, triggerItemClick)
} }
parentNode.appendChild(elem) parentNode.appendChild(elem)
...@@ -160,3 +156,13 @@ export default function parseNodes (nodes, parentNode, $vm) { ...@@ -160,3 +156,13 @@ export default function parseNodes (nodes, parentNode, $vm) {
}) })
return parentNode return parentNode
} }
function processClickEvent (node, elem, triggerItemClick) {
if (['a', 'img'].includes(node.name) && triggerItemClick) {
elem.setAttribute('onClick', 'return false;')
elem.addEventListener('click', (e) => {
triggerItemClick(e, { node })
e.stopPropagation()
}, true)
}
}
...@@ -162,7 +162,6 @@ export default { ...@@ -162,7 +162,6 @@ export default {
mounted () { mounted () {
this._currentCheck() this._currentCheck()
this.touchtrack(this.$refs.slidesWrapper, '_handleContentTrack', true) this.touchtrack(this.$refs.slidesWrapper, '_handleContentTrack', true)
this._resetLayout()
this.$watch(() => { this.$watch(() => {
return this.autoplay && !this.userTracking return this.autoplay && !this.userTracking
}, this._inintAutoplay) }, this._inintAutoplay)
......
...@@ -13,11 +13,6 @@ const customize = cached((str) => { ...@@ -13,11 +13,6 @@ const customize = cached((str) => {
}) })
function initTriggerEvent (mpInstance) { function initTriggerEvent (mpInstance) {
if (__PLATFORM__ === 'mp-weixin' || __PLATFORM__ === 'app-plus') {
if (!wx.canIUse || !wx.canIUse('nextTick')) {
return
}
}
const oldTriggerEvent = mpInstance.triggerEvent const oldTriggerEvent = mpInstance.triggerEvent
mpInstance.triggerEvent = function (event, ...args) { mpInstance.triggerEvent = function (event, ...args) {
return oldTriggerEvent.apply(mpInstance, [customize(event), ...args]) return oldTriggerEvent.apply(mpInstance, [customize(event), ...args])
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册