智能照明系统APP-本地串口
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
LightingSystemApp-serial/.svn/pristine/9e/9e811dae242237207324b3cd5ed...

94 lines
2.5 KiB

const path = require('path')
const babel = require('@babel/core')
const loaderUtils = require('loader-utils')
const {
hashify,
hasModule,
removeExt,
normalizePath
} = require('@dcloudio/uni-cli-shared')
const {
resolve,
getPlatformExts,
cacheGlobalComponents,
normalizeNodeModules
} = require('./shared')
const babelPluginGlobalComponent = require('./babel-plugin-global-component')
const templateExt = getPlatformExts().template
function getNormalMainJsCode (params) {
return `import App from './${normalizePath(params.page)}.vue'
import Vue from 'vue'
App.mpType='page'
const app = new Vue(App)
app.$mount()`
}
function getMPVuePageFactoryMainJsCode (params) {
return `import pageFactory from 'mpvue-page-factory'
import App from './${normalizePath(params.page)}.vue'
Page(pageFactory(App))`
}
module.exports = function (content, map) {
if (process.env.UNI_USING_COMPONENTS) {
return require('./main-new').call(this, content, map)
}
this.cacheable && this.cacheable()
if (this.resourceQuery) {
const params = loaderUtils.parseQuery(this.resourceQuery)
if (params && params.page) {
params.page = decodeURIComponent(params.page)
return (process.env.UNI_PLATFORM === 'mp-weixin' || process.env.UNI_PLATFORM === 'app-plus')
? getMPVuePageFactoryMainJsCode(params) : getNormalMainJsCode(params)
}
} else {
// 解析全局组件
const plugins = []
if (hasModule('@babel/plugin-syntax-typescript')) {
plugins.push('@babel/plugin-syntax-typescript')
plugins.push([
'@babel/plugin-proposal-decorators',
{
legacy: true
}
])
}
plugins.push(babelPluginGlobalComponent)
const ast = babel.transform(content, {
root: process.env.UNI_CLI_CONTEXT,
plugins
})
const globalComponents = {}
const callback = this.async()
if (!ast.metadata.globalComponents) {
ast.metadata.globalComponents = {}
}
Promise.all(Object.keys(ast.metadata.globalComponents).map(name => {
return resolve.call(this, ast.metadata.globalComponents[name]).then(resolved => {
resolved = path.relative(process.env.UNI_INPUT_DIR, resolved)
const hashed = hashify(resolved)
globalComponents[name] = {
name: hashed,
src: '/' + normalizeNodeModules(removeExt(resolved)) + '.vue' +
templateExt
}
})
})).then(() => {
cacheGlobalComponents(globalComponents)
callback(null, content)
}, err => {
callback(err, content)
})
}
}