提交 25c5d70a 编写于 作者: Q qiang

Merge branch 'dev' into alpha

......@@ -32,7 +32,9 @@ const {
normalizePath,
getComponentName,
convertStaticStyle,
getTemplatePath
getTemplatePath,
createSource,
deleteAsset
} = require('./util')
const {
......@@ -108,6 +110,8 @@ module.exports = {
getComponentName,
convertStaticStyle,
getTemplatePath,
createSource,
deleteAsset,
jsPreprocessOptions,
cssPreprocessOptions,
htmlPreprocessOptions,
......
......@@ -4,6 +4,7 @@ const hash = require('hash-sum')
const crypto = require('crypto')
const escapeStringRegexp = require('escape-string-regexp')
const escapeGlob = require('glob-escape')
const webpack = require('webpack')
const isWin = /^win/.test(process.platform)
......@@ -159,6 +160,25 @@ function isNormalPage (pagePath) {
return !pagePath.startsWith('ext://')
}
function createSource (content) {
return webpack.version[0] > 4 ? new webpack.sources.RawSource(content) : {
size () {
return Buffer.byteLength(content, 'utf8')
},
source () {
return content
}
}
}
function deleteAsset (compilation, name) {
if ('deleteAsset' in compilation) {
compilation.deleteAsset(name)
} else {
delete compilation.assets[name]
}
}
module.exports = {
isNormalPage,
isInHBuilderX,
......@@ -198,5 +218,7 @@ module.exports = {
}),
getTemplatePath () {
return path.join(__dirname, '../template')
}
},
createSource,
deleteAsset
}
......@@ -698,7 +698,9 @@ const FIRST_TIME = '__first_time';
* 设置页面首次访问时间,用户获取页面/应用停留时常
*/
const set_first_time = () => {
const time = new Date().getTime();
// 获取当前时间 ,以下代码获取到是毫秒级时间戳 ,实际上用到是秒级时间戳,所以需要除以1000
// const time = new Date().getTime()
let time = get_time();
const timeStorge = dbSet(FIRST_TIME,time);
return timeStorge
};
......@@ -722,8 +724,8 @@ const get_residence_time = (type) => {
if (first_time !== 0) {
residenceTime = last_time - first_time;
}
residenceTime = parseInt(residenceTime / 1000);
// 将毫秒级时间戳转换为秒级时间戳,因为直接获取的是秒级时间戳,所以不需要转换
// residenceTime = parseInt(residenceTime / 1000)
residenceTime = residenceTime < 1 ? 1 : residenceTime;
if (type === 'app') {
let overtime = residenceTime > APP_PVER_TIME ? true : false;
......
......@@ -696,7 +696,9 @@ const FIRST_TIME = '__first_time';
* 设置页面首次访问时间,用户获取页面/应用停留时常
*/
const set_first_time = () => {
const time = new Date().getTime();
// 获取当前时间 ,以下代码获取到是毫秒级时间戳 ,实际上用到是秒级时间戳,所以需要除以1000
// const time = new Date().getTime()
let time = get_time();
const timeStorge = dbSet(FIRST_TIME,time);
return timeStorge
};
......@@ -720,8 +722,8 @@ const get_residence_time = (type) => {
if (first_time !== 0) {
residenceTime = last_time - first_time;
}
residenceTime = parseInt(residenceTime / 1000);
// 将毫秒级时间戳转换为秒级时间戳,因为直接获取的是秒级时间戳,所以不需要转换
// residenceTime = parseInt(residenceTime / 1000)
residenceTime = residenceTime < 1 ? 1 : residenceTime;
if (type === 'app') {
let overtime = residenceTime > APP_PVER_TIME ? true : false;
......
......@@ -666,7 +666,9 @@ const FIRST_TIME = '__first_time';
* 设置页面首次访问时间,用户获取页面/应用停留时常
*/
const set_first_time = () => {
const time = new Date().getTime();
// 获取当前时间 ,以下代码获取到是毫秒级时间戳 ,实际上用到是秒级时间戳,所以需要除以1000
// const time = new Date().getTime()
let time = get_time();
const timeStorge = dbSet(FIRST_TIME,time);
return timeStorge
};
......@@ -690,8 +692,8 @@ const get_residence_time = (type) => {
if (first_time !== 0) {
residenceTime = last_time - first_time;
}
residenceTime = parseInt(residenceTime / 1000);
// 将毫秒级时间戳转换为秒级时间戳,因为直接获取的是秒级时间戳,所以不需要转换
// residenceTime = parseInt(residenceTime / 1000)
residenceTime = residenceTime < 1 ? 1 : residenceTime;
if (type === 'app') {
let overtime = residenceTime > APP_PVER_TIME ? true : false;
......
......@@ -664,7 +664,9 @@ const FIRST_TIME = '__first_time';
* 设置页面首次访问时间,用户获取页面/应用停留时常
*/
const set_first_time = () => {
const time = new Date().getTime();
// 获取当前时间 ,以下代码获取到是毫秒级时间戳 ,实际上用到是秒级时间戳,所以需要除以1000
// const time = new Date().getTime()
let time = get_time();
const timeStorge = dbSet(FIRST_TIME,time);
return timeStorge
};
......@@ -688,8 +690,8 @@ const get_residence_time = (type) => {
if (first_time !== 0) {
residenceTime = last_time - first_time;
}
residenceTime = parseInt(residenceTime / 1000);
// 将毫秒级时间戳转换为秒级时间戳,因为直接获取的是秒级时间戳,所以不需要转换
// residenceTime = parseInt(residenceTime / 1000)
residenceTime = residenceTime < 1 ? 1 : residenceTime;
if (type === 'app') {
let overtime = residenceTime > APP_PVER_TIME ? true : false;
......
......@@ -9,7 +9,9 @@ const {
getPlatformCssnano,
getPlatformStat,
getPlatformPush,
getPlatformUniCloud
getPlatformUniCloud,
createSource,
deleteAsset
} = require('@dcloudio/uni-cli-shared')
const WebpackUniAppPlugin = require('../../packages/webpack-uni-app-loader/plugin/index')
......@@ -26,7 +28,7 @@ function createUniMPPlugin () {
}
const createWxMpIndependentPlugins = require('@dcloudio/uni-mp-weixin/lib/createIndependentPlugin')
const UniTips = require('./tips')
function getProvides () {
......@@ -77,62 +79,61 @@ function getProvides () {
return provides
}
function processWxss (name, assets) {
function processWxss (compilation, name, assets) {
const dirname = path.dirname(name)
const mainWxssCode = `@import "${normalizePath(path.relative(dirname, 'common/main.wxss'))}";`
const code = `${mainWxssCode}` + assets[name].source().toString()
assets[name] = {
size () {
return Buffer.byteLength(code, 'utf8')
},
source () {
return code
}
}
compilation.updateAsset(name, createSource(code))
}
const parseRequirePath = path => path.startsWith('common') ? `./${path}` : path
function procssJs (name, assets, hasVendor) {
function procssJs (compilation, name, assets, hasVendor) {
const dirname = path.dirname(name)
const runtimeJsCode = `require('${normalizePath(parseRequirePath(path.relative(dirname, 'common/runtime.js')))}');`
const vendorJsCode = hasVendor
? `require('${normalizePath(parseRequirePath(path.relative(dirname, 'common/vendor.js')))}');` : ''
const mainJsCode = `require('${normalizePath(parseRequirePath(path.relative(dirname, 'common/main.js')))}');`
const code = `${runtimeJsCode}${vendorJsCode}${mainJsCode}` + assets[name].source().toString()
assets[name] = {
size () {
return Buffer.byteLength(code, 'utf8')
},
source () {
return code
compilation.updateAsset(name, createSource(code))
}
function processAssets (compilation) {
const assets = compilation.assets
const hasMainWxss = assets['common/main.wxss']
const hasVendor = assets['common/vendor.js']
Object.keys(assets).forEach(name => {
if (name.startsWith('common')) {
return
}
}
const extname = path.extname(name)
if (extname === '.wxss' && hasMainWxss && process.UNI_ENTRY[name.replace(extname, '')]) {
processWxss(compilation, name, assets)
} else if (extname === '.js') {
procssJs(compilation, name, assets, hasVendor)
}
})
// delete assets['common/main.js']
deleteAsset(compilation, 'app.js')
deleteAsset(compilation, 'app.json')
deleteAsset(compilation, 'app.wxss')
deleteAsset(compilation, 'project.config.json')
}
class PreprocessAssetsPlugin {
apply (compiler) {
compiler.hooks.emit.tap('PreprocessAssetsPlugin', compilation => {
const assets = compilation.assets
const hasMainWxss = assets['common/main.wxss']
const hasVendor = assets['common/vendor.js']
Object.keys(assets).forEach(name => {
if (name.startsWith('common')) {
return
}
const extname = path.extname(name)
if (extname === '.wxss' && hasMainWxss && process.UNI_ENTRY[name.replace(extname, '')]) {
processWxss(name, assets)
} else if (extname === '.js') {
procssJs(name, assets, hasVendor)
}
if (webpack.version[0] > 4) {
compiler.hooks.compilation.tap('PreprocessAssetsPlugin', compilation => {
compilation.hooks.processAssets.tap({
name: 'PreprocessAssetsPlugin',
stage: webpack.Compilation.PROCESS_ASSETS_STAGE_ADDITIONAL
}, (_) => {
processAssets(compilation)
})
})
// delete assets['common/main.js']
delete assets['app.js']
delete assets['app.json']
delete assets['app.wxss']
delete assets['project.config.json']
})
} else {
compiler.hooks.emit.tap('PreprocessAssetsPlugin', (compilation) => processAssets(compilation))
}
}
}
......@@ -143,7 +144,7 @@ function initSubpackageConfig (webpackConfig, vueOptions) {
}
vueOptions.outputDir = process.env.UNI_OUTPUT_DIR
webpackConfig.output.path(process.env.UNI_OUTPUT_DIR)
webpackConfig.output.jsonpFunction('webpackJsonp_' + (process.env.UNI_SUBPACKGE || process.env.UNI_MP_PLUGIN))
webpackConfig.output.set(webpack.version[0] > 4 ? 'chunkLoadingGlobal' : 'jsonpFunction', 'webpackJsonp_' + (process.env.UNI_SUBPACKGE || process.env.UNI_MP_PLUGIN))
}
function addToUniEntry (fileName) {
......@@ -192,7 +193,7 @@ module.exports = {
if ((process.env.UNI_SUBPACKGE || process.env.UNI_MP_PLUGIN) && process.env.UNI_SUBPACKGE !== 'main') {
plugins.push(new PreprocessAssetsPlugin())
}
}
{
const globalEnv = process.env.UNI_PLATFORM === 'mp-alipay' ? 'my' : 'wx';
......@@ -230,11 +231,11 @@ ${globalEnv}.__webpack_require_UNI_MP_PLUGIN__ = __webpack_require__;`
}
if (process.env.NODE_ENV === 'production' || process.env.UNI_MINIMIZE === 'true') {
output.pathinfo = false
}
if (process.env.UNI_PLATFORM === 'mp-weixin' && process.env.NODE_ENV === 'production') {
plugins.push(new UniTips())
}
}
if (process.env.UNI_PLATFORM === 'mp-weixin' && process.env.NODE_ENV === 'production') {
plugins.push(new UniTips())
}
return {
mode: process.env.NODE_ENV === 'production' ? 'production' : 'development',
......
......@@ -10,7 +10,7 @@ const {
pagesJsonJsFileName
} = require('@dcloudio/uni-cli-shared/lib/pages')
const { createSource } = require('../shared')
const { createSource, getModuleId } = require('../shared')
const generateApp = require('./generate-app')
const generateJson = require('./generate-json')
......@@ -65,7 +65,8 @@ function addMPPluginRequire (compilation) {
const orignalSource = compilation.getAsset(name).source.source()
const globalEnv = process.env.UNI_PLATFORM === 'mp-alipay' ? 'my' : 'wx'
const filePath = normalizePath(path.resolve(process.env.UNI_INPUT_DIR, name))
const uniModuleId = modules.find(module => module.resource && normalizePath(module.resource) === filePath).id
const uniModule = modules.find(module => module.resource && normalizePath(module.resource) === filePath)
const uniModuleId = getModuleId(compilation, uniModule)
const source = orignalSource + `\nmodule.exports = ${globalEnv}.__webpack_require_UNI_MP_PLUGIN__('${uniModuleId}');\n`
......
......@@ -2,7 +2,9 @@ const webpack = require('webpack')
const {
removeExt,
getPlatformExts,
getPlatformTarget
getPlatformTarget,
createSource,
deleteAsset
} = require('@dcloudio/uni-cli-shared')
const {
......@@ -40,25 +42,6 @@ function restoreNodeModules (str) {
return str
}
function createSource (content) {
return webpack.version[0] > 4 ? new webpack.sources.RawSource(content) : {
size () {
return Buffer.byteLength(content, 'utf8')
},
source () {
return content
}
}
}
function deleteAsset (compilation, name) {
if ('deleteAsset' in compilation) {
compilation.deleteAsset(name)
} else {
delete compilation.assets[name]
}
}
function getIssuer (compilation, module) {
return webpack.version[0] > 4 ? compilation.moduleGraph.getIssuer(module) : module.issuer
}
......
......@@ -266,10 +266,14 @@ module.exports = function (pagesJson, manifestJson, project = {}) {
const projectName = getPlatformProject()
const projectPath =
const rootProjectPath =
projectName &&
path.resolve(process.env.VUE_CLI_CONTEXT || process.cwd(), projectName)
const srcProjectPath = projectName && path.resolve(process.env.UNI_INPUT_DIR, projectName)
const projectPath = rootProjectPath && fs.existsSync(rootProjectPath) ? rootProjectPath : srcProjectPath
if (projectPath && fs.existsSync(projectPath)) {
// 自定义 project.config.json
const platform = process.env.UNI_PLATFORM
......@@ -290,18 +294,6 @@ module.exports = function (pagesJson, manifestJson, project = {}) {
})
}
if (
process.env.UNI_PLATFORM === 'mp-weixin' ||
process.env.UNI_PLATFORM === 'mp-qq'
) {
// 微信不需要生成,其他平台做拷贝
return {
app: {
name: 'app',
content: trimMPJson(app)
}
}
}
return {
app: {
name: 'app',
......@@ -331,7 +323,7 @@ module.exports = function (pagesJson, manifestJson, project = {}) {
Object.keys(platformJson).forEach(key => {
if (
!projectKeys.includes(key) && ['usingComponents', 'optimization'].indexOf(key) === -1
!projectKeys.includes(key) && !NON_APP_JSON_KEYS.includes(key)
) {
// usingComponents 是编译模式开关,需要过滤,不能拷贝到 app
app[key] = platformJson[key]
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册