From 6f73dcc083eb6d859167c7758f5f2cc1a1f19319 Mon Sep 17 00:00:00 2001 From: chencheng Date: Wed, 9 May 2018 14:52:23 +0800 Subject: [PATCH] feat(umi-build-dva): ignore test files as model, Close #419 --- jest.config.js | 1 + .../fixtures/getModel/ignore-d-ts/models/a.ts | 0 .../getModel/ignore-d-ts/models/b.d.ts | 2 + .../getModel/ignore-test-files/models/a.ts | 0 .../ignore-test-files/models/b.test.js | 2 + .../ignore-test-files/models/c.test.ts | 2 + .../ignore-test-files/models/d.test.tsx | 2 + .../ignore-test-files/models/e.test.jsx | 2 + .../src/fixtures/getModel/model/model.js | 0 .../src/fixtures/getModel/model/models/a.js | 0 .../getModel/models-with-singular/model/a.js | 0 .../getModel/models-with-singular/models/a.js | 0 .../src/fixtures/getModel/models/models/a.js | 0 .../src/fixtures/getModel/models/models/a.jsx | 0 .../src/fixtures/getModel/models/models/a.ts | 0 .../src/fixtures/getModel/models/models/a.tsx | 0 packages/umi-plugin-dva/src/index.js | 70 +++++++++++-------- packages/umi-plugin-dva/src/index.test.js | 64 +++++++++++++++++ scripts/build.js | 6 +- 19 files changed, 120 insertions(+), 31 deletions(-) create mode 100644 packages/umi-plugin-dva/src/fixtures/getModel/ignore-d-ts/models/a.ts create mode 100644 packages/umi-plugin-dva/src/fixtures/getModel/ignore-d-ts/models/b.d.ts create mode 100644 packages/umi-plugin-dva/src/fixtures/getModel/ignore-test-files/models/a.ts create mode 100644 packages/umi-plugin-dva/src/fixtures/getModel/ignore-test-files/models/b.test.js create mode 100644 packages/umi-plugin-dva/src/fixtures/getModel/ignore-test-files/models/c.test.ts create mode 100644 packages/umi-plugin-dva/src/fixtures/getModel/ignore-test-files/models/d.test.tsx create mode 100644 packages/umi-plugin-dva/src/fixtures/getModel/ignore-test-files/models/e.test.jsx create mode 100644 packages/umi-plugin-dva/src/fixtures/getModel/model/model.js create mode 100644 packages/umi-plugin-dva/src/fixtures/getModel/model/models/a.js create mode 100644 packages/umi-plugin-dva/src/fixtures/getModel/models-with-singular/model/a.js create mode 100644 packages/umi-plugin-dva/src/fixtures/getModel/models-with-singular/models/a.js create mode 100644 packages/umi-plugin-dva/src/fixtures/getModel/models/models/a.js create mode 100644 packages/umi-plugin-dva/src/fixtures/getModel/models/models/a.jsx create mode 100644 packages/umi-plugin-dva/src/fixtures/getModel/models/models/a.ts create mode 100644 packages/umi-plugin-dva/src/fixtures/getModel/models/models/a.tsx create mode 100644 packages/umi-plugin-dva/src/index.test.js diff --git a/jest.config.js b/jest.config.js index aebce19b8fbb..52dcfa531e0c 100644 --- a/jest.config.js +++ b/jest.config.js @@ -6,6 +6,7 @@ module.exports = { '/lib/', '/packages/umi/src/scripts/test.js', '/packages/umi/src/test.js', + '/packages/**/fixtures/**/*.test.(j|t)s?(x)', ], collectCoverageFrom: ['packages/**/src/**/*.{ts,tsx,js,jsx}'], }; diff --git a/packages/umi-plugin-dva/src/fixtures/getModel/ignore-d-ts/models/a.ts b/packages/umi-plugin-dva/src/fixtures/getModel/ignore-d-ts/models/a.ts new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/umi-plugin-dva/src/fixtures/getModel/ignore-d-ts/models/b.d.ts b/packages/umi-plugin-dva/src/fixtures/getModel/ignore-d-ts/models/b.d.ts new file mode 100644 index 000000000000..139597f9cb07 --- /dev/null +++ b/packages/umi-plugin-dva/src/fixtures/getModel/ignore-d-ts/models/b.d.ts @@ -0,0 +1,2 @@ + + diff --git a/packages/umi-plugin-dva/src/fixtures/getModel/ignore-test-files/models/a.ts b/packages/umi-plugin-dva/src/fixtures/getModel/ignore-test-files/models/a.ts new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/umi-plugin-dva/src/fixtures/getModel/ignore-test-files/models/b.test.js b/packages/umi-plugin-dva/src/fixtures/getModel/ignore-test-files/models/b.test.js new file mode 100644 index 000000000000..139597f9cb07 --- /dev/null +++ b/packages/umi-plugin-dva/src/fixtures/getModel/ignore-test-files/models/b.test.js @@ -0,0 +1,2 @@ + + diff --git a/packages/umi-plugin-dva/src/fixtures/getModel/ignore-test-files/models/c.test.ts b/packages/umi-plugin-dva/src/fixtures/getModel/ignore-test-files/models/c.test.ts new file mode 100644 index 000000000000..139597f9cb07 --- /dev/null +++ b/packages/umi-plugin-dva/src/fixtures/getModel/ignore-test-files/models/c.test.ts @@ -0,0 +1,2 @@ + + diff --git a/packages/umi-plugin-dva/src/fixtures/getModel/ignore-test-files/models/d.test.tsx b/packages/umi-plugin-dva/src/fixtures/getModel/ignore-test-files/models/d.test.tsx new file mode 100644 index 000000000000..139597f9cb07 --- /dev/null +++ b/packages/umi-plugin-dva/src/fixtures/getModel/ignore-test-files/models/d.test.tsx @@ -0,0 +1,2 @@ + + diff --git a/packages/umi-plugin-dva/src/fixtures/getModel/ignore-test-files/models/e.test.jsx b/packages/umi-plugin-dva/src/fixtures/getModel/ignore-test-files/models/e.test.jsx new file mode 100644 index 000000000000..139597f9cb07 --- /dev/null +++ b/packages/umi-plugin-dva/src/fixtures/getModel/ignore-test-files/models/e.test.jsx @@ -0,0 +1,2 @@ + + diff --git a/packages/umi-plugin-dva/src/fixtures/getModel/model/model.js b/packages/umi-plugin-dva/src/fixtures/getModel/model/model.js new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/umi-plugin-dva/src/fixtures/getModel/model/models/a.js b/packages/umi-plugin-dva/src/fixtures/getModel/model/models/a.js new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/umi-plugin-dva/src/fixtures/getModel/models-with-singular/model/a.js b/packages/umi-plugin-dva/src/fixtures/getModel/models-with-singular/model/a.js new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/umi-plugin-dva/src/fixtures/getModel/models-with-singular/models/a.js b/packages/umi-plugin-dva/src/fixtures/getModel/models-with-singular/models/a.js new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/umi-plugin-dva/src/fixtures/getModel/models/models/a.js b/packages/umi-plugin-dva/src/fixtures/getModel/models/models/a.js new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/umi-plugin-dva/src/fixtures/getModel/models/models/a.jsx b/packages/umi-plugin-dva/src/fixtures/getModel/models/models/a.jsx new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/umi-plugin-dva/src/fixtures/getModel/models/models/a.ts b/packages/umi-plugin-dva/src/fixtures/getModel/models/models/a.ts new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/umi-plugin-dva/src/fixtures/getModel/models/models/a.tsx b/packages/umi-plugin-dva/src/fixtures/getModel/models/models/a.tsx new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/umi-plugin-dva/src/index.js b/packages/umi-plugin-dva/src/index.js index f7bc48c88c72..df25227f751b 100644 --- a/packages/umi-plugin-dva/src/index.js +++ b/packages/umi-plugin-dva/src/index.js @@ -1,8 +1,45 @@ -import { readFileSync, writeFileSync, existsSync, statSync } from 'fs'; +import { readFileSync, writeFileSync, existsSync } from 'fs'; import { join, dirname } from 'path'; import globby from 'globby'; import uniq from 'lodash.uniq'; +export function getModel(cwd, api) { + const { config } = api.service; + const { winPath } = api.utils; + + const modelJSPath = join(cwd, 'model.js'); + if (existsSync(modelJSPath)) { + return [winPath(modelJSPath)]; + } + const modelJSXPath = join(cwd, 'model.jsx'); + if (existsSync(modelJSXPath)) { + return [winPath(modelJSXPath)]; + } + const modelTSPath = join(cwd, 'model.ts'); + if (existsSync(modelTSPath)) { + return [winPath(modelTSPath)]; + } + + const modelTSXPath = join(cwd, 'model.tsx'); + if (existsSync(modelTSXPath)) { + return [winPath(modelTSXPath)]; + } + + return globby + .sync(`./${config.singular ? 'model' : 'models'}/**/*.{ts,tsx,js,jsx}`, { + cwd, + }) + .filter( + p => + !p.endsWith('.d.ts') && + !p.endsWith('.test.js') && + !p.endsWith('.test.jsx') && + !p.endsWith('.test.ts') && + !p.endsWith('.test.tsx'), + ) + .map(p => winPath(join(cwd, p))); +} + export default function(api, opts = {}) { const { RENDER, ROUTER_MODIFIER, IMPORT } = api.placeholder; const { paths, config } = api.service; @@ -20,33 +57,6 @@ export default function(api, opts = {}) { } } - function getModel(cwd) { - const modelJSPath = join(cwd, 'model.js'); - if (existsSync(modelJSPath)) { - return [winPath(modelJSPath)]; - } - const modelJSXPath = join(cwd, 'model.jsx'); - if (existsSync(modelJSXPath)) { - return [winPath(modelJSXPath)]; - } - const modelTSPath = join(cwd, 'model.ts'); - if (existsSync(modelTSPath)) { - return [winPath(modelTSPath)]; - } - - const modelTSXPath = join(cwd, 'model.tsx'); - if (existsSync(modelTSXPath)) { - return [winPath(modelTSXPath)]; - } - - return globby - .sync(`./${config.singular ? 'model' : 'models'}/**/*.{ts,tsx,js,jsx}`, { - cwd, - }) - .filter(p => !p.endsWith('.d.ts')) - .map(p => winPath(join(cwd, p))); - } - function endWithSlash(path) { return path.slice(-1) !== '/' ? `${path}/` : path; } @@ -74,7 +84,7 @@ export default function(api, opts = {}) { } function getGlobalModels() { - let models = getModel(paths.absSrcPath); + let models = getModel(paths.absSrcPath, api); if (!shouldImportDynamic) { // dev 模式下还需要额外载入 page 路由的 models 文件 models = [...models, ...getModelsWithRoutes(api.service.routes)]; @@ -87,7 +97,7 @@ export default function(api, opts = {}) { function getPageModels(cwd) { let models = []; while (!isPagesPath(cwd) && !isSrcPath(cwd) && cwd !== '/') { - models = models.concat(getModel(cwd)); + models = models.concat(getModel(cwd, api)); cwd = dirname(cwd); } return models; diff --git a/packages/umi-plugin-dva/src/index.test.js b/packages/umi-plugin-dva/src/index.test.js new file mode 100644 index 000000000000..fc5b26a124cf --- /dev/null +++ b/packages/umi-plugin-dva/src/index.test.js @@ -0,0 +1,64 @@ +import { join } from 'path'; +import { getModel } from './index'; + +const api = { + service: { + config: { + singular: false, + }, + }, + utils: { + winPath(p) { + return p; + }, + }, +}; + +const base = join(__dirname, 'fixtures', 'getModel'); + +function normalizeModels(models, base) { + return models.map(model => model.replace(base, '$CWD$')); +} + +describe('umi-plugin-dva', () => { + it('getModel with model.js', () => { + const dir = join(base, 'model'); + const models = normalizeModels(getModel(dir, api), dir); + expect(models).toEqual(['$CWD$/model.js']); + }); + + it('getModel with models directory', () => { + const dir = join(base, 'models'); + const models = normalizeModels(getModel(dir, api), dir); + expect(models).toEqual([ + '$CWD$/models/a.js', + '$CWD$/models/a.jsx', + '$CWD$/models/a.ts', + '$CWD$/models/a.tsx', + ]); + }); + + it('getModel with model directory and singular', () => { + const dir = join(base, 'models-with-singular'); + const models = normalizeModels( + getModel(dir, { + ...api, + service: { config: { singular: true } }, + }), + dir, + ); + expect(models).toEqual(['$CWD$/model/a.js']); + }); + + it('getModel ignore d.ts', () => { + const dir = join(base, 'ignore-d-ts'); + const models = normalizeModels(getModel(dir, api), dir); + expect(models).toEqual(['$CWD$/models/a.ts']); + }); + + it('getModel ignore test files', () => { + const dir = join(base, 'ignore-test-files'); + const models = normalizeModels(getModel(dir, api), dir); + expect(models).toEqual(['$CWD$/models/a.ts']); + }); +}); diff --git a/scripts/build.js b/scripts/build.js index f8637a5031bf..76a962a7bfed 100644 --- a/scripts/build.js +++ b/scripts/build.js @@ -74,7 +74,11 @@ function transform(opts = {}) { function buildPkg(pkg) { rimraf.sync(join(cwd, 'packages', pkg, 'lib')); const stream = vfs - .src(`./packages/${pkg}/src/**/*.js`) + .src([ + `./packages/${pkg}/src/**/*.js`, + `!./packages/${pkg}/src/**/fixtures/**/*.js`, + `!./packages/${pkg}/src/**/*.test.js`, + ]) .pipe( through.obj((f, enc, cb) => { f.contents = new Buffer( // eslint-disable-line