From 0c88e947e544c2afc0d41cc61319df1e2270391a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=87=E7=BA=AF?= Date: Wed, 2 Dec 2020 15:33:53 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96export=E6=8F=92?= =?UTF-8?q?=E4=BB=B6=E4=B8=AD=E5=AF=B9=E5=BE=85=E5=AF=BC=E5=87=BA=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E7=9A=84=E5=9C=B0=E5=9D=80=E8=AE=A1=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../generateFiles/core/exports/index.js | 43 +++++++++---------- .../generateFiles/core/plugin/index.js | 6 ++- .../generateFiles/core/routes/index.js | 6 ++- packages/fes-plugin-request/src/index.js | 5 ++- 4 files changed, 32 insertions(+), 28 deletions(-) diff --git a/packages/fes-plugin-built-in/src/plugins/generateFiles/core/exports/index.js b/packages/fes-plugin-built-in/src/plugins/generateFiles/core/exports/index.js index 644f51e8..34ce94cf 100644 --- a/packages/fes-plugin-built-in/src/plugins/generateFiles/core/exports/index.js +++ b/packages/fes-plugin-built-in/src/plugins/generateFiles/core/exports/index.js @@ -1,5 +1,6 @@ import { lodash, winPath } from '@umijs/utils'; import assert from 'assert'; +import path from 'path'; const reserveLibrarys = ['fes']; // reserve library // todo 插件导出内容冲突问题待解决 @@ -12,51 +13,49 @@ const reserveExportsNames = [ 'Route' ]; -export function generateExports({ - item, - fesExportsHook -}) { +export function generateExports(basePath, { item, fesExportsHook }) { assert(item.source, 'source should be supplied.'); + const source = path.relative(path.basename(basePath), item.source); assert( item.exportAll || item.specifiers, - 'exportAll or specifiers should be supplied.', + 'exportAll or specifiers should be supplied.' ); assert( - !reserveLibrarys.includes(item.source), - `${item.source} is reserve library, Please don't use it.`, + !reserveLibrarys.includes(source), + `${source} is reserve library, Please don't use it.` ); if (item.exportAll) { - return `export * from '${winPath(item.source)}';`; + return `export * from '${winPath(source)}';`; } assert( Array.isArray(item.specifiers), - `specifiers should be Array, but got ${item.specifiers.toString()}.`, + `specifiers should be Array, but got ${item.specifiers.toString()}.` ); const specifiersStrArr = item.specifiers.map((specifier) => { if (typeof specifier === 'string') { assert( !reserveExportsNames.includes(specifier), - `${specifier} is reserve name, you can use 'exported' to set alias.`, + `${specifier} is reserve name, you can use 'exported' to set alias.` ); assert( !fesExportsHook[specifier], - `${specifier} is Defined, you can use 'exported' to set alias.`, + `${specifier} is Defined, you can use 'exported' to set alias.` ); fesExportsHook[specifier] = true; return specifier; } assert( lodash.isPlainObject(specifier), - `Configure item context should be Plain Object, but got ${specifier}.`, + `Configure item context should be Plain Object, but got ${specifier}.` ); assert( specifier.local && specifier.exported, - 'local and exported should be supplied.', + 'local and exported should be supplied.' ); return `${specifier.local} as ${specifier.exported}`; }); return `export { ${specifiersStrArr.join(', ')} } from '${winPath( - item.source, + source )}';`; } @@ -69,15 +68,15 @@ export default function (api) { }); const fesExportsHook = {}; // repeated definition + const absoluteFilePath = 'core/exports.js'; api.writeTmpFile({ - path: 'core/exports.js', - content: - `${fesExports - .map(item => generateExports({ - item, - fesExportsHook - })) - .join('\n')}\n` + path: absoluteFilePath, + content: `${fesExports + .map(item => generateExports(absoluteFilePath, { + item, + fesExportsHook + })) + .join('\n')}\n` }); }); } diff --git a/packages/fes-plugin-built-in/src/plugins/generateFiles/core/plugin/index.js b/packages/fes-plugin-built-in/src/plugins/generateFiles/core/plugin/index.js index a7b15de7..c00179d5 100644 --- a/packages/fes-plugin-built-in/src/plugins/generateFiles/core/plugin/index.js +++ b/packages/fes-plugin-built-in/src/plugins/generateFiles/core/plugin/index.js @@ -9,6 +9,8 @@ export default function (api) { utils: { Mustache } } = api; + const absoluteFilePath = 'core/plugin.js'; + api.onGenerateFiles(async () => { const validKeys = await api.applyPlugins({ key: 'addRuntimePluginKey', @@ -31,7 +33,7 @@ export default function (api) { ].filter(Boolean) }); api.writeTmpFile({ - path: 'core/plugin.js', + path: absoluteFilePath, content: Mustache.render( readFileSync(join(__dirname, 'plugin.tpl'), 'utf-8'), { @@ -56,6 +58,6 @@ export default function (api) { api.addExports(() => ({ specifiers: ['plugin'], - source: './plugin' + source: absoluteFilePath })); } diff --git a/packages/fes-plugin-built-in/src/plugins/generateFiles/core/routes/index.js b/packages/fes-plugin-built-in/src/plugins/generateFiles/core/routes/index.js index 8794ac7e..96145815 100644 --- a/packages/fes-plugin-built-in/src/plugins/generateFiles/core/routes/index.js +++ b/packages/fes-plugin-built-in/src/plugins/generateFiles/core/routes/index.js @@ -11,11 +11,13 @@ export default function (api) { utils: { Mustache } } = api; + const absoluteFilePath = 'core/routes.js'; + api.onGenerateFiles(async () => { const routesTpl = readFileSync(join(__dirname, 'routes.tpl'), 'utf-8'); const routes = await api.getRoutes(); api.writeTmpFile({ - path: 'core/routes.js', + path: absoluteFilePath, content: Mustache.render(routesTpl, { runtimePath, routes: routesToJSON({ routes, config: api.config }), @@ -26,6 +28,6 @@ export default function (api) { api.addExports(() => ({ specifiers: ['router'], - source: './routes.js' + source: absoluteFilePath })); } diff --git a/packages/fes-plugin-request/src/index.js b/packages/fes-plugin-request/src/index.js index f3253698..e327d1a5 100644 --- a/packages/fes-plugin-request/src/index.js +++ b/packages/fes-plugin-request/src/index.js @@ -22,12 +22,13 @@ export default (api) => { }); const namespace = 'plugin-request'; + const absoluteFilePath = `${namespace}/request.js`; const requestTemplate = readFileSync(join(__dirname, 'template', 'request.js'), 'utf-8'); api.onGenerateFiles(() => { // 文件写出 const { dataField = '', messageUI } = api.config.request; api.writeTmpFile({ - path: `${namespace}/request.js`, + path: absoluteFilePath, content: requestTemplate .replace('REPLACE_MESSAGE_UI', messageUI || 'ant-design-vue') .replace('REPLACE_DATA_FIELD', dataField) @@ -58,7 +59,7 @@ export default (api) => { api.addExports(() => [ { exportAll: true, - source: `../${namespace}/request.js` + source: absoluteFilePath } ]); };