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

Merge branch 'dev' of https://github.com/dcloudio/uni-app into dev

......@@ -446,16 +446,21 @@ class Util {
}, 0);
}
_sendReportRequest(options) {
this._navigationBarTitle.lt = '1';
let query = options.query && JSON.stringify(options.query) !== '{}' ? '?' + JSON.stringify(options.query) : '';
this.statData.lt = '1';
this.statData.url = options.path + query;
this.statData.url = (options.path + query) || '';
this.statData.t = getTime();
this.statData.sc = getScene(options.scene);
this.statData.fvts = getFirstVisitTime();
this.statData.lvts = getLastVisitTime();
this.statData.tvc = getTotalVisitCount();
this.getNetworkInfo();
if (getPlatformName() === 'n') {
this.getProperty();
} else {
this.getNetworkInfo();
}
}
_sendPageRequest(opt) {
......@@ -479,6 +484,13 @@ class Util {
t: getTime(),
p: this.statData.p
};
if (getPlatformName() === 'n' && this.statData.p === 'a') {
setTimeout(() => {
this.request(options);
}, 200);
return
}
this.request(options);
}
......@@ -499,6 +511,12 @@ class Util {
t: getTime(),
p: this.statData.p
};
if (getPlatformName() === 'n' && this.statData.p === 'a') {
setTimeout(() => {
this.request(options, type);
}, 200);
return
}
this.request(options, type);
}
_sendEventRequest({
......@@ -531,6 +549,13 @@ class Util {
});
}
getProperty() {
plus.runtime.getProperty(plus.runtime.appid, (wgtinfo) => {
this.statData.v = wgtinfo.version || '';
this.getNetworkInfo();
});
}
getLocation() {
if (statConfig.getLocation) {
uni.getLocation({
......@@ -618,28 +643,29 @@ class Util {
return
}
setTimeout(() => {
uni.request({
url: STAT_URL,
method: 'POST',
data: optionsData,
success: () => {
if (process.env.NODE_ENV === 'development') {
console.log('stat request success');
}
},
fail: (e) => {
if (process.env.NODE_ENV === 'development') {
console.log('stat request fail', e);
}
if (++this._retry < 3) {
setTimeout(() => {
this.request(data);
}, 1000);
}
uni.request({
url: STAT_URL,
method: 'POST',
// header: {
// 'content-type': 'application/json' // 默认值
// },
data: optionsData,
success: () => {
if (process.env.NODE_ENV === 'development') {
console.log('stat request success');
}
});
}, 200);
},
fail: (e) => {
if (process.env.NODE_ENV === 'development') {
console.log('stat request fail', e);
}
if (++this._retry < 3) {
setTimeout(() => {
this.request(data);
}, 1000);
}
}
});
}
/**
......
{
"name": "@dcloudio/uni-stat",
"version": "0.0.111",
"version": "0.0.113",
"description": "",
"main": "dist/index.js",
"scripts": {
......
......@@ -181,16 +181,21 @@ class Util {
}, 0)
}
_sendReportRequest(options) {
this._navigationBarTitle.lt = '1';
let query = options.query && JSON.stringify(options.query) !== '{}' ? '?' + JSON.stringify(options.query) : '';
this.statData.lt = '1';
this.statData.url = options.path + query;
this.statData.url = (options.path + query) || '';
this.statData.t = getTime();
this.statData.sc = getScene(options.scene);
this.statData.fvts = getFirstVisitTime();
this.statData.lvts = getLastVisitTime();
this.statData.tvc = getTotalVisitCount();
this.getNetworkInfo();
if (getPlatformName() === 'n') {
this.getProperty();
} else {
this.getNetworkInfo();
}
}
_sendPageRequest(opt) {
......@@ -214,6 +219,13 @@ class Util {
t: getTime(),
p: this.statData.p
}
if (getPlatformName() === 'n' && this.statData.p === 'a') {
setTimeout(() => {
this.request(options);
}, 200)
return
}
this.request(options);
}
......@@ -234,6 +246,12 @@ class Util {
t: getTime(),
p: this.statData.p
}
if (getPlatformName() === 'n' && this.statData.p === 'a') {
setTimeout(() => {
this.request(options, type)
}, 200)
return
}
this.request(options, type)
}
_sendEventRequest({
......@@ -266,6 +284,13 @@ class Util {
});
}
getProperty() {
plus.runtime.getProperty(plus.runtime.appid, (wgtinfo) => {
this.statData.v = wgtinfo.version || '';
this.getNetworkInfo();
});
}
getLocation() {
if (statConfig.getLocation) {
uni.getLocation({
......@@ -353,28 +378,29 @@ class Util {
return
}
setTimeout(() => {
uni.request({
url: STAT_URL,
method: 'POST',
data: optionsData,
success: () => {
if (process.env.NODE_ENV === 'development') {
console.log('stat request success');
}
},
fail: (e) => {
if (process.env.NODE_ENV === 'development') {
console.log('stat request fail', e);
}
if (++this._retry < 3) {
setTimeout(() => {
this.request(data);
}, 1000);
}
uni.request({
url: STAT_URL,
method: 'POST',
// header: {
// 'content-type': 'application/json' // 默认值
// },
data: optionsData,
success: () => {
if (process.env.NODE_ENV === 'development') {
console.log('stat request success');
}
});
}, 200)
},
fail: (e) => {
if (process.env.NODE_ENV === 'development') {
console.log('stat request fail', e);
}
if (++this._retry < 3) {
setTimeout(() => {
this.request(data);
}, 1000);
}
}
});
}
/**
......
......@@ -14,14 +14,17 @@ function assertCodegen (template, templateCode, renderCode = `with(this){}`, opt
expect(res.render).toBe(renderCode)
}
describe('mp:compiler-extra', () => {
describe('mp:compiler-extra', () => {
it('generate mp filter ', () => {
assertCodegen(
/* eslint-disable no-template-curly-in-string */
`<view @touchmove="a.touchmove">{{t.a}}{{t['a']}}{{t.a(b)}}{{t['a'](b)}}{{u.t.a(b)}}{{u.t.a}}</view>`,
`<view bindtouchmove="{{a.touchmove}}">{{t.a+t[\'a\']+t.a(b)+t[\'a\'](b)+$root.g0+u.t.a}}</view>`,
`<view bindtouchmove="{{a.touchmove}}">{{t.a+t['a']+t.a(b)+t['a'](b)+$root.g0+u.t.a}}</view>`,
'with(this){var g0=u.t.a(b);$mp.data=Object.assign({},{$root:{g0:g0}})}', {
filterModules: ['t', 'a']
filterModules: {
t: {},
a: {}
}
}
)
})
......
......@@ -10,7 +10,10 @@ const res = compiler.compile(
isTest: true,
platform: 'mp-weixin'
},
filterModules: ['t', 'a']
filterModules: {
t: {},
a: {}
}
})
// ---BEGIN:JSON---{"n":"v"}---END:JSON---
console.log(res)
......@@ -39,8 +39,8 @@ module.exports = {
options.mp.resourcePath = options.resourcePath
options.mp.globalUsingComponents = options.globalUsingComponents || Object.create(null)
options.mp.filterModules = options.filterModules || []
options.mp.filterModules = Object.keys(options.filterModules || {})
// (可用的原生微信小程序组件,global+scoped)
options.mp.wxComponents = options.wxComponents || Object.create(null)
......@@ -88,21 +88,31 @@ at ${resourcePath}.vue:1`)
})
/**
* TODO
* 方案0.最佳方案是在 loader 中直接 emitFile,但目前 vue template-loader 不好介入,自定义的 compiler 结果又无法顺利返回给 loader
* 方案1.通过 loader 传递 emitFile 来提交生成 wxml,需要一个 template loader 来给自定义 compier 增加 emitFile
* 方案2.缓存 wxml 内容,由 plugin 生成 assets 来提交生成 wxml
* ...暂时使用方案1
*/
* TODO
* 方案0.最佳方案是在 loader 中直接 emitFile,但目前 vue template-loader 不好介入,自定义的 compiler 结果又无法顺利返回给 loader
* 方案1.通过 loader 传递 emitFile 来提交生成 wxml,需要一个 template loader 来给自定义 compier 增加 emitFile
* 方案2.缓存 wxml 内容,由 plugin 生成 assets 来提交生成 wxml
* ...暂时使用方案1
*/
if (options.emitFile) {
if (options.updateSpecialMethods) {
options.updateSpecialMethods(resourcePath, [...res.specialMethods])
}
const filterTemplate = []
options.mp.filterModules.forEach(name => {
const filterTag = options.filterTagName
const filterModule = options.filterModules[name]
if (filterModule.content) {
filterTemplate.push(`<${filterTag} module="${name}">
${filterModule.content}
</${filterTag}>`)
}
})
if (
process.UNI_ENTRY[resourcePath] &&
process.env.UNI_PLATFORM !== 'app-plus' &&
process.env.UNI_PLATFORM !== 'h5'
process.env.UNI_PLATFORM !== 'app-plus' &&
process.env.UNI_PLATFORM !== 'h5'
) {
// 检查是否启用 shadow
let colorType = false
......@@ -112,12 +122,12 @@ at ${resourcePath}.vue:1`)
const windowJson = JSON.parse(pageJsonStr)
if (process.env.UNI_PLATFORM === 'mp-alipay') {
colorType = windowJson.allowsBounceVertical === 'NO' &&
windowJson.navigationBarShadow &&
windowJson.navigationBarShadow.colorType
windowJson.navigationBarShadow &&
windowJson.navigationBarShadow.colorType
} else {
colorType = windowJson.disableScroll &&
windowJson.navigationBarShadow &&
windowJson.navigationBarShadow.colorType
windowJson.navigationBarShadow &&
windowJson.navigationBarShadow.colorType
}
} catch (e) {}
}
......@@ -142,8 +152,8 @@ at ${resourcePath}.vue:1`)
if (
res.generic &&
res.generic.length &&
options.updateGenericComponents
res.generic.length &&
options.updateGenericComponents
) {
options.updateGenericComponents(
resourcePath,
......@@ -152,8 +162,8 @@ at ${resourcePath}.vue:1`)
}
if (
res.componentGenerics &&
Object.keys(res.componentGenerics).length &&
options.updateComponentGenerics
Object.keys(res.componentGenerics).length &&
options.updateComponentGenerics
) {
options.updateComponentGenerics(
resourcePath,
......
......@@ -2,61 +2,61 @@ const path = require('path')
const loaderUtils = require('loader-utils')
const {
parse
parse
} = require(require.resolve('@vue/component-compiler-utils', {
paths: [require.resolve('vue-loader')]
paths: [require.resolve('vue-loader')]
})) // 确保使用的与 vue-loader 一致
const {
getPlatformFilterTag
getPlatformFilterTag
} = require('@dcloudio/uni-cli-shared/lib/platform')
const FILTER_TAG = getPlatformFilterTag()
module.exports = function(source) {
if (!FILTER_TAG) {
return source
}
const loaderContext = this
const {
sourceMap,
rootContext,
resourcePath
} = loaderContext
const options = loaderUtils.getOptions(loaderContext) || {}
const filename = path.basename(resourcePath)
const context = rootContext || process.cwd()
const sourceRoot = path.dirname(path.relative(context, resourcePath))
// 使用 @vue/component-compiler-utils 来处理,共用 cache
const descriptor = parse({
source,
compiler: options.compiler,
filename,
sourceRoot,
needMap: sourceMap
})
if (!descriptor.template) {
return source
}
const modules = new Set()
if (!FILTER_TAG) {
return source
}
const loaderContext = this
const {
sourceMap,
rootContext,
resourcePath
} = loaderContext
const options = loaderUtils.getOptions(loaderContext) || {}
const filename = path.basename(resourcePath)
const context = rootContext || process.cwd()
const sourceRoot = path.dirname(path.relative(context, resourcePath))
// 使用 @vue/component-compiler-utils 来处理,共用 cache
const descriptor = parse({
source,
compiler: options.compiler,
filename,
sourceRoot,
needMap: sourceMap
})
if (!descriptor.template) {
return source
}
descriptor.customBlocks.filter(block => {
if (block.type === FILTER_TAG && block.attrs.module) {
modules.add(block.attrs.module)
}
})
const modules = Object.create(null)
if (modules.size) {
descriptor.template.attrs['filter-modules'] = [...modules]
descriptor.customBlocks.filter(block => {
if (block.type === FILTER_TAG && block.attrs.module) {
modules[block.attrs.module] = block
}
// delete customBlocks
descriptor.customBlocks.length = 0
})
return source
if (Object.keys(modules)) {
descriptor.template.attrs['filter-modules'] = JSON.stringify(modules)
}
// delete customBlocks
descriptor.customBlocks.length = 0
return source
}
......@@ -18,11 +18,16 @@ const {
updateUsingGlobalComponents
} = require('@dcloudio/uni-cli-shared/lib/cache')
const {
getPlatformFilterTag
} = require('@dcloudio/uni-cli-shared/lib/platform')
const {
normalizeNodeModules
} = require('./shared')
const templateExt = getPlatformExts().template
const filterTagName = getPlatformFilterTag() || ''
module.exports = function (content) {
this.cacheable && this.cacheable()
......@@ -35,14 +40,14 @@ module.exports = function (content) {
const wxComponents = getWXComponents(resourcePath.replace(path.extname(resourcePath), ''))
const params = loaderUtils.parseQuery(this.resourceQuery)
const filterModules = (params && params['filter-modules'] || '').split(',')
/* eslint-disable no-mixed-operators */
const filterModules = JSON.parse(params && params['filter-modules'] || '{}')
Object.assign(vueLoaderOptions.options.compilerOptions, {
mp: {
platform: process.env.UNI_PLATFORM
},
filterModules,
filterTagName,
resourcePath,
emitFile: this.emitFile,
wxComponents,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册