UNPKG

@mpxjs/webpack-plugin

Version:

mpx compile core

92 lines (90 loc) 2.51 kB
const createHelpers = require('../helpers') const async = require('async') const getClassMap = require('./style-helper').getClassMap const shallowStringify = require('../utils/shallow-stringify') module.exports = function (styles, { loaderContext, ctorType, autoScope, moduleId }, callback) { const { getRequestString } = createHelpers(loaderContext) let content = '' let output = '/* styles */\n' if (styles.length) { const warn = (msg) => { loaderContext.emitWarning( new Error('[style compiler][' + loaderContext.resource + ']: ' + msg) ) } const error = (msg) => { loaderContext.emitError( new Error('[style compiler][' + loaderContext.resource + ']: ' + msg) ) } const { mode, srcMode } = loaderContext.getMpx() async.eachOfSeries(styles, (style, i, callback) => { const scoped = style.scoped || autoScope const extraOptions = { moduleId, scoped, extract: false } // todo 建立新的request在内部导出classMap,便于样式模块复用 loaderContext.importModule(JSON.parse(getRequestString('styles', style, extraOptions, i))).then((result) => { if (Array.isArray(result)) { result = result.map((item) => { return item[1] }).join('\n') } content += result.trim() + '\n' callback() }).catch((e) => { callback(e) }) // require style }, (err) => { if (err) return callback(err) try { const classMap = getClassMap({ content, filename: loaderContext.resourcePath, mode, srcMode, warn, error }) if (ctorType === 'app') { output += ` let __appClassMap global.__getAppClassMap = function() { if(!__appClassMap) { __appClassMap = ${shallowStringify(classMap)}; } return __appClassMap; };\n` } else { output += ` let __classMap global.currentInject.injectMethods = { __getClassMap: function() { if(!__classMap) { __classMap = ${shallowStringify(classMap)}; } return __classMap; } };\n` } } catch (e) { return callback(e) } callback(null, { output }) }) } else { callback(null, { output: '' }) } }