UNPKG

nuke-debug-util

Version:

qap调试库函数

185 lines (178 loc) 5.4 kB
'use strict'; /** * 校验方法库 */ const colors = require('chalk'); const glob = require('glob'); const path = require('path'); const cwd = process.cwd(); const srcPath = path.resolve(cwd, 'src'); const fs = require('fs-extra'); const ORIGIN_CONFIG = require('./schema/debug.default.js'); const util = require('./util'); /** * 校验调试构建配置文件 * @return \{{{object}}\} {{配置对象}}{{}} * 基本的构建配置webpack3已经做了校验,此处用于特殊校验及hack处理 * entry : src/pages/detail/index.jsx */ module.exports.debugConfig = function(configPath) { var config = {}; try { config = require(configPath); } catch (error) { config = {}; } let webpackConfig = {}; if (config.toolkitConfig && config.toolkitConfig.webpack) { webpackConfig = extendsConfig( config.toolkitConfig.webpack, ORIGIN_CONFIG.toolkitConfig.webpack ); } else if (fs.existsSync(path.resolve(cwd, 'webpack.config.js'))) { let oldConfig = require(path.resolve(cwd, 'webpack.config.js')); oldConfig = oldConfig.dev ? oldConfig.dev() : oldConfig; if (oldConfig.externals) { oldConfig.externals = oldConfig.externals[0] ? oldConfig.externals[0] : oldConfig.externals; } return { success: true, data: { type: 'compat', config: Object.assign(ORIGIN_CONFIG.toolkitConfig.webpack, { hotreload: false, externals: oldConfig.externals, needH5SdkPack: oldConfig.externals ? true : false, alias: oldConfig.resolve && oldConfig.resolve.alias ? Object.assign( {}, ORIGIN_CONFIG.toolkitConfig.webpack.alias, oldConfig.resolve.alias ) : {}, 'optimize-size': { nuke: oldConfig.externals && oldConfig.externals.nuke ? false : true, }, entry: oldConfig.entry, output: oldConfig.output, }), }, }; } else { console.log( colors.red('[Config error]本地缺少webpack 1.x配置文件webpack.config.js') ); process.exit(1); } // 存在hack字段则取webpack的自定义配置 if (webpackConfig.hack && webpackConfig.hack.webpackPath) { let customWebpackConfig = {}; try { customWebpackConfig = require(webpackConfig.hack.webpackPath); console.log( colors.yellow( `[Config:warning]自定义webpack配置获取失败,将使用默认配置调试打包` ) ); return { success: true, data: { type: 'custom', config: customWebpackConfig, }, }; } catch (error) { /** * 取脚手架默认配置。 */ return { success: true, data: { type: 'default', config: webpackConfig, }, }; } } // 格式化默认入口 src/pages/aaaa/index.jsx if (!webpackConfig.entry || util.isEmptyObject(webpackConfig.entry)) { webpackConfig.entry = {}; glob .sync('*', { cwd: path.join(srcPath, 'pages'), }) .forEach(function(page) { webpackConfig.entry[page] = ['./pages/' + page + '/index']; }); } else { // 暂时不强制指定页面入口路径,只输出提示。 Object.keys(webpackConfig.entry).map(item => { let reg = new RegExp(/pages\/\w.*\/index/); if (!reg.test(webpackConfig.entry[item])) { console.log( colors.yellow( `[Config:warning]${ webpackConfig.entry[item] }不是建议的入口路径,入口路径规范需符合:` ), colors.blue.underline('src/pages/xxx/index.js(x)') ); } }); } //内置的优先级大于按需引用的优先级 Object.keys(webpackConfig.externals).map(pkg => { webpackConfig.needH5SdkPack = true; // 是否需要h5版本的sdk-pack用于降级显示。 if (webpackConfig.externals[pkg]) { if (webpackConfig['optimize-size'][pkg]) { console.log( colors.yellow( `[Config:warning]内置${pkg}优先级大于按需引用,按需引用将无法生效` ) ); webpackConfig['optimize-size'][pkg] = false; } webpackConfig.externals[pkg] = `commonjs ${pkg}`; } else { webpackConfig.needH5SdkPack = false; } }); // 输出路径 /** * @todo 设置不开放 */ // console.log(colors.green(webpackConfig.output)); // if (webpackConfig.output) { // let reg = /^[a-z0-9]+$/i; // if (!reg.test(webpackConfig.output)) { // console.log(colors.red(`[Config:error]输出路径只能由英文字母或数字组成,不能包含其他特殊字符。采用默认output作为输出路径`)); // webpackConfig.output = 'output'; // } // } return { success: true, data: { type: 'default', config: webpackConfig, }, }; }; /** * 合并默认schema 如果源对象不存在的属性,则默认使用schema * @param {*} targetObj schema配置 * @param {*} srcObj 源配置 */ function extendsConfig(srcObj, targetObj) { Object.keys(srcObj).map(function(attr) { if (targetObj[attr]) { if (targetObj[attr] !== {}) { targetObj[attr] = srcObj[attr]; } } }); return targetObj; }