UNPKG

weex-nuke

Version:

基于 Rax 、Weex 的高性能组件体系 ~~

209 lines (192 loc) 5.55 kB
'use strict'; const path = require('path'); const fs = require('fs'); const extraFS = require('fs-extra'); var jsonfile = require('jsonfile'); jsonfile.spaces = 4; const ROOT = path.join(__dirname, '..'); const SOURCE = path.join(ROOT, 'src'); const TARGET = ROOT; const PATTERN_NEXT = /^(@alife\/mqn|nuke)\-([^\/]+)(.*)$/; const PATTERN_NODE_MODULES = /^node_modules/; const NEXT_CORE = 'nuke-core'; const pkg = require(path.join(ROOT, 'package.json')); const variables = {}; const addons = { 'index.js': '' }; let core_addons = []; module.exports = { source: SOURCE, // babel: { // to: 'lib', // from: 'src' // }, target: { path: TARGET, redirect: function(relative) { const srcRelative = relative; relative = relative .replace(PATTERN_NODE_MODULES, 'lib/') .replace(/nuke-([a-zA-Z0-9-]*)\/lib/, function(word) { return varCase(word) .replace('Nuke', '') .replace('/lib', ''); }); if (relative.indexOf('/node_modules/') !== -1) { throw new Error('请解决小包中的版本冲突!\n' + srcRelative); } return relative; } }, writeBack: true, //是否回写dependency,在新增组件时需注意无法回写首次添加的依赖【bug】 // exclude: Object.keys(pkg.devDependencies || {}), exclude: id => !PATTERN_NEXT.test(id), extensions: { js: ['', '.jsx', '.js'], css: ['.scss', '.css'], html: ['.html', '.htm', '.tpl'] }, clear: [ 'lib', 'docs', 'demos', 'index.js', 'src/**/*/', 'src/index.js', 'dist', '__site' ].map(f => path.join(TARGET, f)), modules: [ { match: PATTERN_NEXT, main: ['lib/index.js', 'lib/index.jsx'], docs: { 'README.md': { target: (pathname, entry) => { return `docs/${entry.name.replace(PATTERN_NEXT, '$2')}/index.md`; } }, 'README.en.md': { target: (pathname, entry) => { return `docs/${entry.name.replace(PATTERN_NEXT, '$2')}/en.md`; } }, 'HISTORY.md': { target: (pathname, entry) => { return `docs/${entry.name.replace(PATTERN_NEXT, '$2')}/HISTORY.md`; } }, 'docs/*.md': { target: (pathname, entry) => { return `docs/${entry.name.replace( PATTERN_NEXT, '$2' )}/demo/${path.basename(pathname)}`; }, resolve: (id, entry) => { return id; }, combine: (id, name) => { if (PATTERN_NEXT.test(id)) { let cname = varCase(RegExp.$2); if (cname == 'Mounter' || cname == 'Components') { return null; } return { name: cname, group: 'weex-nuke' }; } return null; } } }, theme: { main: 'theme/index.jsx', entryName: (pathname, entry) => { return `demos/${entry.name.replace(PATTERN_NEXT, '$2')}`; }, deps: (pathname, entry) => { const pkg = require(path.join(entry.context, 'package.json')); return Object.keys(pkg.devDependencies || {}) .filter( name => PATTERN_NEXT.test(name) && name !== '@alife/nuke-demo-helper' ) .map(name => name.replace(PATTERN_NEXT, '$2')); } } } ], listeners: { //调整lib目录结构 transformed: (pathname, name) => { const key = name.replace(PATTERN_NEXT, '$2'); if (name === NEXT_CORE) { core_addons.push(pathname); } else { let relative; let srcRelative = getRelative( path.join(TARGET, 'index'), pathname, true ); addons['index.js'] += `module.exports.${varCase( key )} = require('${srcRelative}');\n`; } }, //输出index.js引用 outputed: () => { // write addons(root, entry) for (let relative in addons) { let target = path.join(TARGET, relative); // make sure dir is exists if (!fs.existsSync(path.dirname(target))) { fs.mkdirSync(path.dirname(target)); } fs.writeFileSync(target, new Buffer(addons[relative])); } } }, notice: { dingtalk: [ 'https://oapi.dingtalk.com/robot/send?access_token=7e4ee95a82be5dbe989956b7e686ac79bd9e47a3c50d06c2181eb04a9d408f76' ] }, switchs: { buildDemo: true, //是否构建demo--用于配置平台 sassCheck: false, //是否进行sass-check--qnui非必须 buildDocs: true, compatibility: { //兼容性基线版本设置 qn: { ios: '5.8.2', android: '5.8.2', describe: {} }, tb: { ios: '6.4.1', android: '6.4.1', describe: {} }, tm: { ios: '5.28.2', android: '5.28.2', describe: {} } } } }; function getRelative(from, to, isJS) { const relative = path.relative(path.dirname(from), to).replace(/\\/g, '/'); return isJS ? (relative[0] === '.' ? relative : './' + relative) : relative; } /* * abc-xyz -> AbcXyz */ function varCase(str) { let result = []; for (let i = 0, l = str.length; i < l; i++) { let c = str[i]; if (c === '-') { result.push(str[i + 1].toUpperCase()); i++; continue; } result.push(c.toLowerCase()); } if (result[0]) { result[0] = result[0].toUpperCase(); } return result.join(''); }