const grunt = require("grunt"); function uniq(names) { return [...new Set(names)]; } function sync(patterns) { return uniq(grunt.file.expand({ filter: path => !new RegExp(/__test__/g).test(path) }, patterns)).map(name => `./${name}`); } const fixJs = "./dist/fix/fix.js"; const fixProxyJs = './dist/fix/fix.proxy.js'; const fixIEJs = "./dist/fix/fix.ie.js"; const fixCompact = "./dist/fix/fix.compact.js"; const fixIECompact = './dist/fix/fix.compact.ie.js'; const workerCompact = './dist/fix/worker.compact.js'; const lodashJs = "src/core/1.lodash.js"; const basicAttachmentMap = { polyfill: sync(["src/core/0.foundation.js", "src/polyfill/**/*.js"]).concat(["@babel/polyfill", "es6-promise/auto"]), polyfillIE: sync(["src/core/0.foundation.js", "src/polyfill/**/*.js"]).concat([ "core-js/features/object/define-property", "core-js/features/object/create", "core-js/features/object/assign", "core-js/features/object/get-own-property-symbols", "core-js/features/object/get-prototype-of", "core-js/features/array/for-each", "core-js/features/array/index-of", "core-js/features/function/bind", "core-js/features/promise", "core-js/features/string/replace", "core-js/es/map", // "core-js", ]), core: sync([ "src/less/core/**/*.less", "src/less/theme/**/*.less", lodashJs, "src/core/**/*.js", "src/data/**/*.js", ]), // 最基础的控件 base: sync([ "src/less/base/**/*.less", "src/third/**/*.js", "src/base/**/*.js", ]), // 实现好的一些基础实例 case: sync([ "src/case/**/*.js", ]), widget: sync([ "src/less/widget/**/*.less", "src/widget/**/*.js", "src/component/**/*.js", ]), router: sync([ "src/router/**/*.js", ]), 'core_without_normalize': sync( ["src/less/core/**/*.less", "src/less/theme/**/*.less", "!src/less/core/normalize.less", "!src/less/core/normalize2.less"], ), resource: sync(["src/less/resource/**/*.less"]), font: sync(["public/less/font.less"]), ts: ['./typescript/bundle.ts'], ui: sync([ 'ui/less/app.less', 'ui/less/**/*.less', 'ui/js/**/*.js', ]), config: sync(["demo/version.js", "i18n/i18n.cn.js"]), utils: sync([ "src/core/0.foundation.js", lodashJs, "src/core/constant/**/*.js", "src/core/func/**/*.js", "src/core/2.base.js", "src/core/3.ob.js", "src/core/6.inject.js", "src/core/utils/*.js", "i18n/i18n.cn.js", "_mobile/date.i18n.cn.js", "src/data/**/*.js", ]), fix: [fixJs], fixProxy: [fixProxyJs], fixIE: [fixIEJs], }; const bundle = [].concat( basicAttachmentMap.polyfill, basicAttachmentMap.core, basicAttachmentMap.fix, basicAttachmentMap.base, basicAttachmentMap.case, basicAttachmentMap.widget, sync(["public/less/app.less", "public/less/**/*.less"]), [fixCompact, workerCompact], basicAttachmentMap.router, sync(["public/js/**/*.js", "public/js/index.js", "i18n/i18n.cn.js"]), basicAttachmentMap.ts, ); const coreJs = [].concat( basicAttachmentMap.polyfill, basicAttachmentMap.core, basicAttachmentMap.fix, basicAttachmentMap.base, basicAttachmentMap.case, basicAttachmentMap.widget, ['./dist/fix/fix.compact.js'], basicAttachmentMap.router, basicAttachmentMap.ts, ); const resource = sync(["private/less/app.less", "private/less/**/*.less"]); const config = sync(["public/js/**/*.js", "public/js/index.js", "i18n/i18n.cn.js"]); const bundleIE = [].concat( basicAttachmentMap.polyfillIE, basicAttachmentMap.core, basicAttachmentMap.fixIE, basicAttachmentMap.base, basicAttachmentMap.case, basicAttachmentMap.widget, sync(["public/less/app.less", "public/less/**/*.less"]), [fixIECompact, workerCompact], basicAttachmentMap.router, sync(["public/js/**/*.js", "public/js/index.js", "i18n/i18n.cn.js"]), basicAttachmentMap.ts, ); const bundleWithoutNormalize = [].concat( basicAttachmentMap.core_without_normalize, sync([ "src/less/base/**/*.less", "src/less/widget/**/*.less", "public/less/**/*.less", "!public/less/app.less", // ts的less ]), ); const fineuiWithoutNormalize = [].concat( basicAttachmentMap.core_without_normalize, sync([ "src/less/base/**/*.less", "src/less/widget/**/*.less", 'ui/less/app.less', 'ui/less/**/*.less', ]), ); const fineui = [].concat( basicAttachmentMap.polyfill, basicAttachmentMap.core, basicAttachmentMap.fix, basicAttachmentMap.base, basicAttachmentMap.case, basicAttachmentMap.widget, basicAttachmentMap.router, [fixCompact, workerCompact], basicAttachmentMap.ui, basicAttachmentMap.ts, ); const fineuiProxy = [].concat( basicAttachmentMap.core, basicAttachmentMap.fixProxy, basicAttachmentMap.base, basicAttachmentMap.case, basicAttachmentMap.widget, basicAttachmentMap.router, [fixCompact, workerCompact], basicAttachmentMap.ui, basicAttachmentMap.ts, ); const fineuiIE = [].concat( basicAttachmentMap.polyfillIE, basicAttachmentMap.core, basicAttachmentMap.fixIE, basicAttachmentMap.base, basicAttachmentMap.case, basicAttachmentMap.widget, basicAttachmentMap.router, [fixIECompact, workerCompact], basicAttachmentMap.ui, basicAttachmentMap.ts, ); const fineuiWithoutJqueryAndPolyfillJs = [].concat( sync([ "src/core/foundation.js", lodashJs, "src/core/**/*.js", "src/data/**/*.js", "dist/fix/fix.js", "src/base/**/*.js", "src/case/**/*.js", "!src/core/platform/web/**/*.js", "!src/base/single/input/file.js", "!src/case/ztree/**/*.js", ]), basicAttachmentMap.widget, sync([fixCompact, workerCompact, "ui/js/**/*.js"]), basicAttachmentMap.ts, ); const demo = [].concat( basicAttachmentMap.polyfill, basicAttachmentMap.core, basicAttachmentMap.router, basicAttachmentMap.fix, basicAttachmentMap.base, basicAttachmentMap.case, basicAttachmentMap.widget, sync(["public/less/app.less", "public/less/**/*.less"]), [fixCompact, workerCompact], basicAttachmentMap.config, basicAttachmentMap.ts, sync(["demo/less/*.less", "demo/less/**/*.less", "demo/app.js", "demo/js/**/*.js", "demo/config.js"]), ); module.exports = { fix: fixJs, fixProxy: fixProxyJs, fixIE: fixIEJs, lodash: lodashJs, font: basicAttachmentMap.font, bundle: uniq(bundle), bundleIE: uniq(bundleIE), fineuiWithoutNormalize: uniq(fineuiWithoutNormalize), bundleWithoutNormalize: uniq(bundleWithoutNormalize), fineui: uniq(fineui), fineuiProxy: uniq(fineuiProxy), fineuiIE: uniq(fineuiIE), fineuiWithoutJqueryAndPolyfillJs: uniq(fineuiWithoutJqueryAndPolyfillJs), utils: uniq(basicAttachmentMap.utils), demo: uniq(demo), coreJs: uniq(coreJs), resource: uniq((resource)), config: uniq(config), };