UNPKG

weex-nuke

Version:

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

185 lines (169 loc) 5.45 kB
'use strict'; var path = require('path'); var fs = require('fs'); var extraFS = require('fs-extra'); var jsonfile = require('jsonfile'); jsonfile.spaces = 4; var ROOT = path.join(__dirname, '..'); var SOURCE = path.join(ROOT, 'src'); var TARGET = ROOT; var PATTERN_NEXT = /^(@alife\/mqn|nuke)\-([^\/]+)(.*)$/; var PATTERN_NODE_MODULES = /^node_modules/; var NEXT_CORE = 'nuke-core'; var pkg = require(path.join(ROOT, 'package.json')); var variables = {}; var addons = { 'index.js': '' }; var core_addons = []; module.exports = { source: SOURCE, // babel: { // to: 'lib', // from: 'src' // }, target: { path: TARGET, redirect: function redirect(relative) { var 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: function exclude(id) { return !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(function (f) { return path.join(TARGET, f); }), modules: [{ match: PATTERN_NEXT, main: ['lib/index.js', 'lib/index.jsx'], docs: { 'README.md': { target: function target(pathname, entry) { return 'docs/' + entry.name.replace(PATTERN_NEXT, '$2') + '/index.md'; } }, 'README.en.md': { target: function target(pathname, entry) { return 'docs/' + entry.name.replace(PATTERN_NEXT, '$2') + '/en.md'; } }, 'HISTORY.md': { target: function target(pathname, entry) { return 'docs/' + entry.name.replace(PATTERN_NEXT, '$2') + '/HISTORY.md'; } }, 'docs/*.md': { target: function target(pathname, entry) { return 'docs/' + entry.name.replace(PATTERN_NEXT, '$2') + '/demo/' + path.basename(pathname); }, resolve: function resolve(id, entry) { return id; }, combine: function combine(id, name) { if (PATTERN_NEXT.test(id)) { var 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: function entryName(pathname, entry) { return 'demos/' + entry.name.replace(PATTERN_NEXT, '$2'); }, deps: function deps(pathname, entry) { var pkg = require(path.join(entry.context, 'package.json')); return Object.keys(pkg.devDependencies || {}).filter(function (name) { return PATTERN_NEXT.test(name) && name !== '@alife/nuke-demo-helper'; }).map(function (name) { return name.replace(PATTERN_NEXT, '$2'); }); } } }], listeners: { //调整lib目录结构 transformed: function transformed(pathname, name) { var key = name.replace(PATTERN_NEXT, '$2'); if (name === NEXT_CORE) { core_addons.push(pathname); } else { var relative = void 0; var srcRelative = getRelative(path.join(TARGET, 'index'), pathname, true); addons['index.js'] += 'module.exports.' + varCase(key) + ' = require(\'' + srcRelative + '\');\n'; } }, //输出index.js引用 outputed: function outputed() { // write addons(root, entry) for (var relative in addons) { var 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) { var relative = path.relative(path.dirname(from), to).replace(/\\/g, '/'); return isJS ? relative[0] === '.' ? relative : './' + relative : relative; } /* * abc-xyz -> AbcXyz */ function varCase(str) { var result = []; for (var i = 0, l = str.length; i < l; i++) { var 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(''); }