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.
212 lines
5.9 KiB
212 lines
5.9 KiB
"use strict";
|
|
|
|
function _react() {
|
|
const data = _interopRequireDefault(require("react"));
|
|
|
|
_react = function _react() {
|
|
return data;
|
|
};
|
|
|
|
return data;
|
|
}
|
|
|
|
function _path() {
|
|
const data = require("path");
|
|
|
|
_path = function _path() {
|
|
return data;
|
|
};
|
|
|
|
return data;
|
|
}
|
|
|
|
function _fs() {
|
|
const data = require("fs");
|
|
|
|
_fs = function _fs() {
|
|
return data;
|
|
};
|
|
|
|
return data;
|
|
}
|
|
|
|
function _uppercamelcase() {
|
|
const data = _interopRequireDefault(require("uppercamelcase"));
|
|
|
|
_uppercamelcase = function _uppercamelcase() {
|
|
return data;
|
|
};
|
|
|
|
return data;
|
|
}
|
|
|
|
function _rimraf() {
|
|
const data = _interopRequireDefault(require("rimraf"));
|
|
|
|
_rimraf = function _rimraf() {
|
|
return data;
|
|
};
|
|
|
|
return data;
|
|
}
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
|
|
|
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
|
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
|
|
if (!process.env.PAGES_PATH) {
|
|
process.env.PAGES_PATH = 'src';
|
|
}
|
|
|
|
function findGitDir(thePath) {
|
|
if (thePath === '/') {
|
|
return null;
|
|
}
|
|
|
|
const items = (0, _fs().readdirSync)(thePath);
|
|
|
|
if (items.includes('.git')) {
|
|
return thePath;
|
|
}
|
|
|
|
return findGitDir((0, _path().dirname)(thePath));
|
|
}
|
|
|
|
function getNameFromPkg(pkg) {
|
|
if (!pkg.name) {
|
|
return null;
|
|
}
|
|
|
|
return pkg.name.split('/').pop();
|
|
}
|
|
|
|
module.exports = function (api) {
|
|
const paths = api.paths,
|
|
logger = api.logger;
|
|
const cwd = paths.cwd || process.cwd();
|
|
const blockPath = (0, _path().join)(cwd, `${process.argv.slice(2)[1] || '.'}`);
|
|
process.env.APP_ROOT = blockPath;
|
|
api.describe({
|
|
config: {
|
|
schema(joi) {
|
|
return joi.object({
|
|
path: joi.string(),
|
|
mockUmiRequest: joi.boolean(),
|
|
menu: joi.object({
|
|
name: joi.string()
|
|
})
|
|
});
|
|
},
|
|
|
|
default: {}
|
|
}
|
|
});
|
|
|
|
const blockConfig = require((0, _path().join)(paths.cwd || '', 'package.json')).blockConfig;
|
|
|
|
const options = api.service.userConfig.blockDevtool || {};
|
|
let subBlocks = []; // 支持区块依赖
|
|
|
|
if (blockConfig && blockConfig.dependencies) {
|
|
logger.debug('find dependencies in package.json');
|
|
const gitRoot = findGitDir(api.paths.cwd || '');
|
|
logger.debug(`get gitRoot: ${gitRoot}`);
|
|
|
|
if (gitRoot) {
|
|
subBlocks = blockConfig.dependencies.map(d => {
|
|
const subBlockPath = (0, _path().join)(gitRoot, d);
|
|
|
|
const subBlockConfig = require((0, _path().join)(subBlockPath, 'package.json'));
|
|
|
|
const subBlockName = (0, _uppercamelcase().default)(getNameFromPkg(subBlockConfig) || '');
|
|
return {
|
|
name: subBlockName,
|
|
path: subBlockPath
|
|
};
|
|
});
|
|
} else {
|
|
throw new Error('Not find git root, can not use dependencies.');
|
|
}
|
|
}
|
|
|
|
api.onGenerateFiles(() => {
|
|
api.writeTmpFile({
|
|
path: 'block-devtool/layout.tsx',
|
|
content: `
|
|
import React from 'react';
|
|
import { BasicLayout } from '@ant-design/pro-layout';
|
|
|
|
export default (props) => {
|
|
const { children } = props;
|
|
return (
|
|
<BasicLayout {...props} pure>
|
|
{children}
|
|
</BasicLayout>
|
|
);
|
|
};
|
|
`
|
|
});
|
|
});
|
|
api.modifyConfig(memo => {
|
|
// 这个环境变量是为了截图的时候可以动态设置 layout
|
|
// 所以会优先从 环境变量里面取
|
|
const path = process.env.BLOCK_DEV_PATH || options.path || '/';
|
|
return _objectSpread({}, memo, {
|
|
routes: [{
|
|
path: '/',
|
|
component: '../.umi/block-devtool/layout',
|
|
routes: [_objectSpread({}, options.menu, {
|
|
path,
|
|
component: (0, _path().join)('../', process.argv.slice(2)[1], './src/index'),
|
|
exact: false
|
|
})]
|
|
}]
|
|
});
|
|
}); // link locales 和 models
|
|
|
|
['locales', 'models'].map(dirName => {
|
|
if ((0, _fs().existsSync)((0, _path().join)(cwd, dirName))) {
|
|
_rimraf().default.sync((0, _path().join)(cwd, dirName));
|
|
}
|
|
|
|
(0, _fs().mkdirSync)((0, _path().join)(cwd, dirName));
|
|
});
|
|
const localesPath = (0, _path().join)(blockPath, 'src', 'locales');
|
|
|
|
if ((0, _fs().existsSync)(localesPath)) {
|
|
// copy 每个文件
|
|
(0, _fs().readdirSync)(localesPath).map(fileName => {
|
|
const copyFilePath = (0, _path().join)(blockPath, 'src', 'locales', fileName);
|
|
|
|
if ((0, _fs().existsSync)(copyFilePath)) {
|
|
(0, _fs().copyFileSync)(copyFilePath, (0, _path().join)(cwd, 'locales', fileName));
|
|
}
|
|
});
|
|
} // link models 文件
|
|
|
|
|
|
['model.ts', 'service.ts', 'data.d.ts'].map(fileName => {
|
|
const copyFilePath = (0, _path().join)(blockPath, 'src', fileName);
|
|
|
|
if ((0, _fs().existsSync)(copyFilePath)) {
|
|
(0, _fs().copyFileSync)(copyFilePath, (0, _path().join)(cwd, 'models', fileName));
|
|
}
|
|
});
|
|
api.addHTMLStyles(() => [{
|
|
content: `
|
|
body,html,#root{
|
|
height:100%
|
|
}
|
|
`
|
|
}]);
|
|
api.chainWebpack(webpackConfig => {
|
|
subBlocks.forEach(b => {
|
|
webpackConfig.resolve.alias.set(`./${b.name}`, (0, _path().join)(b.path, 'src'));
|
|
});
|
|
return webpackConfig;
|
|
});
|
|
}; |