Treecat
2 years ago
14 changed files with 497 additions and 95 deletions
@ -0,0 +1,2 @@
|
||||
@import "../../src/less/resource/app.less"; |
||||
@import "var.less"; |
@ -0,0 +1,2 @@
|
||||
@import "../../src/less/resource/background.less"; |
||||
@import "var.less"; |
@ -0,0 +1,2 @@
|
||||
@import "../../src/less/resource/font.less"; |
||||
@import "var.less"; |
@ -0,0 +1,5 @@
|
||||
@import "../../src/less/resource/icon.less"; |
||||
@import "var.less"; |
||||
|
||||
|
||||
|
@ -0,0 +1,5 @@
|
||||
@webUrl: 'resources?path=/com/fr/web/ui/'; |
||||
|
||||
@fontUrl: '@{webUrl}font/'; //图片的基本地址 |
||||
@imageUrl: '@{webUrl}images/1x/'; //图片的基本地址 |
||||
@image2xUrl: '@{webUrl}images/2x/'; //2倍图片的基本地址 |
@ -1,91 +0,0 @@
|
||||
const webpack = require("webpack"); |
||||
const MiniCssExtractPlugin = require("mini-css-extract-plugin"); |
||||
const TerserPlugin = require("terser-webpack-plugin"); |
||||
const path = require("path"); |
||||
const autoprefixer = require("autoprefixer"); |
||||
const UglifyJsPlugin = require("uglifyjs-webpack-plugin"); |
||||
const CircularDependencyPlugin = require("circular-dependency-plugin"); |
||||
const childProcess = require("child_process"); |
||||
|
||||
function git(command) { |
||||
return childProcess.execSync(`git ${command}`).toString().trim(); |
||||
} |
||||
|
||||
let lessVariables = {}; |
||||
|
||||
if (process.env.LESS_CONFIG_PATH) { |
||||
const lessConfigPath = path.isAbsolute(process.env.LESS_CONFIG_PATH) |
||||
? process.env.LESS_CONFIG_PATH |
||||
: path.resolve(__dirname, "lessconfig", process.env.LESS_CONFIG_PATH); |
||||
|
||||
lessVariables = fs.existsSync(lessConfigPath) ? require(lessConfigPath) || {} : {}; |
||||
} |
||||
|
||||
module.exports = { |
||||
mode: "production", |
||||
entry: { |
||||
"fineui.min": "./src/bundle.js", |
||||
}, |
||||
output: { |
||||
path: path.resolve(__dirname, "dist"), |
||||
filename: "[name].js", |
||||
}, |
||||
devtool: "hidden-source-map", |
||||
module: { |
||||
rules: [ |
||||
{ |
||||
test: /\.js$/, |
||||
exclude: /node_modules/, |
||||
use: { |
||||
loader: "babel-loader", |
||||
}, |
||||
}, |
||||
{ |
||||
test: /\.(css|less)$/, |
||||
use: [ |
||||
MiniCssExtractPlugin.loader, |
||||
{ |
||||
loader: "css-loader", |
||||
options: { |
||||
url: false, |
||||
}, |
||||
}, |
||||
{ |
||||
loader: "postcss-loader", |
||||
options: { |
||||
plugins: [autoprefixer], |
||||
}, |
||||
}, |
||||
{ |
||||
loader: "less-loader", |
||||
options: { |
||||
relativeUrls: false, |
||||
modifyVars: lessVariables, |
||||
}, |
||||
}, |
||||
], |
||||
}, |
||||
], |
||||
}, |
||||
resolve: { |
||||
extensions: [".js", ".ts"], |
||||
alias: { |
||||
"@": path.resolve(__dirname, "src"), |
||||
}, |
||||
}, |
||||
plugins: [new CircularDependencyPlugin()], |
||||
optimization: { |
||||
usedExports: false, |
||||
minimize: true, |
||||
minimizer: [ |
||||
new TerserPlugin({ |
||||
include: /\.js$/i, |
||||
}), |
||||
new webpack.BannerPlugin({ |
||||
banner: `time: ${new Date().toLocaleString()}; branch: ${git( |
||||
"name-rev --name-only HEAD" |
||||
)} commit: ${git("rev-parse HEAD")}`,
|
||||
}), |
||||
], |
||||
}, |
||||
}; |
@ -0,0 +1,265 @@
|
||||
const { sync, uniq } = require("./utils"); |
||||
|
||||
const fixJs = "./dist/fix/fix.js"; |
||||
const fixProxyJs = './dist/fix/fix.proxy.js'; |
||||
const fixCompact = "./dist/fix/fix.compact.js"; |
||||
const workerCompact = './dist/fix/worker.compact.js'; |
||||
const lodashJs = "src/core/1.lodash.js"; |
||||
const jqueryJs = "src/core/platform/web/jquery/_jquery.js"; |
||||
|
||||
const runtimePolyfill = ["core-js/stable"]; |
||||
|
||||
const basicAttachmentMap = { |
||||
polyfill: sync([ |
||||
"src/core/0.foundation.js", |
||||
"src/polyfill/**/*.js", |
||||
]).concat(runtimePolyfill), |
||||
core: sync([ |
||||
"src/less/core/**/*.less", |
||||
"src/less/theme/**/*.less", |
||||
// lodashJs,
|
||||
// jqueryJs,
|
||||
// "src/core/**/*.js",
|
||||
// "src/data/**/*.js",
|
||||
]), |
||||
// 最基础的控件
|
||||
base: sync([ |
||||
"src/less/base/**/*.less", |
||||
// "src/third/**/*.js",
|
||||
// "src/base/**/*.js",
|
||||
]), |
||||
// 实现好的一些基础实例
|
||||
case: sync([ |
||||
// "src/case/**/*.js",
|
||||
"src/less/case/**/*.less", |
||||
]), |
||||
widget: sync([ |
||||
"src/less/widget/**/*.less", |
||||
"src/less/component/**/*.less", |
||||
// "src/widget/**/*.js",
|
||||
// "src/component/**/*.js",
|
||||
]), |
||||
router: sync([ |
||||
"src/router/**/*.js", |
||||
]), |
||||
core_without_platform: sync([ |
||||
"src/core/0.foundation.js", |
||||
lodashJs, |
||||
"src/core/**/*.js", |
||||
"src/data/**/*.js", |
||||
], [ |
||||
"src/core/platform/**/*.js", |
||||
"src/core/controller/**/*.js", |
||||
]), |
||||
core_without_normalize: sync( |
||||
["src/less/core/**/*.less", "src/less/theme/**/*.less"], ["src/less/core/normalize.less", "src/less/core/normalize2.less"] |
||||
), |
||||
core_without_conflict: sync([ |
||||
"src/less/core/**/*.less", |
||||
"src/less/theme/**/*.less", |
||||
lodashJs, |
||||
"src/core/**/*.js", |
||||
"src/data/**/*.js", |
||||
], [ |
||||
"src/core/conflict.js", |
||||
]), |
||||
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/5.inject.js", |
||||
"src/core/utils/*.js", |
||||
"i18n/i18n.cn.js", |
||||
"_mobile/date.i18n.cn.js", |
||||
"src/data/**/*.js", |
||||
]), |
||||
fix: [fixJs], |
||||
fixProxy: [fixProxyJs], |
||||
less: sync([ |
||||
"src/less/core/**/*.less", |
||||
"src/less/theme/**/*.less", |
||||
"src/less/base/**/*.less", |
||||
"src/less/case/**/*.less", |
||||
"src/less/widget/**/*.less", |
||||
"src/less/component/**/*.less", |
||||
]), |
||||
js_bundle: sync(["src/bundle.js"]) |
||||
}; |
||||
|
||||
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 bundleCss = [].concat( |
||||
basicAttachmentMap.less, |
||||
sync(["public/less/app.less", "public/less/**/*.less"]), |
||||
); |
||||
|
||||
// const bundleModern = [].concat(
|
||||
// sync(["src/less/modern.less"]),
|
||||
// sync(["public/modern/app.less", "public/modern/**/*.less"]),
|
||||
// );
|
||||
|
||||
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 bundleWithoutNormalize = [].concat( |
||||
basicAttachmentMap.core_without_normalize, |
||||
sync([ |
||||
"src/less/base/**/*.less", |
||||
"src/less/case/**/*.less", |
||||
"src/less/widget/**/*.less", |
||||
"src/less/component/**/*.less", |
||||
"public/less/**/*.less", |
||||
// ts的less
|
||||
], [ |
||||
"public/less/app.less", |
||||
]), |
||||
); |
||||
|
||||
const fineuiWithoutNormalize = [].concat( |
||||
basicAttachmentMap.core_without_normalize, |
||||
sync([ |
||||
"src/less/base/**/*.less", |
||||
"src/less/case/**/*.less", |
||||
"src/less/widget/**/*.less", |
||||
"src/less/component/**/*.less", |
||||
'ui/less/app.less', |
||||
'ui/less/**/*.less', |
||||
]), |
||||
); |
||||
|
||||
const fineui = [].concat( |
||||
bundleCss, |
||||
basicAttachmentMap.js_bundle, |
||||
basicAttachmentMap.ui, |
||||
// basicAttachmentMap.ts,
|
||||
); |
||||
|
||||
const fineuiWithoutConflict = [].concat( |
||||
basicAttachmentMap.polyfill, |
||||
basicAttachmentMap.core_without_conflict, |
||||
basicAttachmentMap.fix, |
||||
basicAttachmentMap.base, |
||||
basicAttachmentMap.case, |
||||
basicAttachmentMap.widget, |
||||
basicAttachmentMap.router, |
||||
[fixCompact, workerCompact], |
||||
basicAttachmentMap.ui, |
||||
basicAttachmentMap.ts, |
||||
); |
||||
|
||||
// const fineuiModern = [].concat(
|
||||
// sync(["src/less/modern.less"]),
|
||||
// sync([
|
||||
// 'ui/modern/app.less',
|
||||
// 'ui/modern/**/*.less',
|
||||
// ]),
|
||||
// );
|
||||
|
||||
const fineuiProxy = [].concat( |
||||
basicAttachmentMap.polyfill, |
||||
basicAttachmentMap.core, |
||||
basicAttachmentMap.fixProxy, |
||||
basicAttachmentMap.base, |
||||
basicAttachmentMap.case, |
||||
basicAttachmentMap.widget, |
||||
basicAttachmentMap.router, |
||||
[fixCompact, workerCompact], |
||||
basicAttachmentMap.ui, |
||||
basicAttachmentMap.ts, |
||||
); |
||||
|
||||
const fineuiWithoutJqueryAndPolyfillJs = [].concat( |
||||
runtimePolyfill, |
||||
sync([ |
||||
"src/core/0.foundation.js", |
||||
lodashJs, |
||||
"src/core/**/*.js", |
||||
"src/data/**/*.js", |
||||
], [ |
||||
"src/core/platform/web/**/*.js", |
||||
]), |
||||
basicAttachmentMap.fix, |
||||
sync([ |
||||
"src/base/**/*.js", |
||||
"src/case/**/*.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.fix, |
||||
basicAttachmentMap.config, |
||||
basicAttachmentMap.base, |
||||
basicAttachmentMap.case, |
||||
basicAttachmentMap.widget, |
||||
basicAttachmentMap.router, |
||||
sync(["public/less/app.less", "public/less/**/*.less"]), |
||||
[fixCompact, workerCompact], |
||||
basicAttachmentMap.ts, |
||||
sync(["demo/less/*.less", "demo/less/**/*.less", "demo/app.js", "demo/js/**/*.js", "demo/config.js"]), |
||||
); |
||||
|
||||
module.exports = { |
||||
fix: fixJs, |
||||
fixProxy: fixProxyJs, |
||||
lodash: lodashJs, |
||||
font: basicAttachmentMap.font, |
||||
bundle: uniq(bundle), |
||||
fineuiWithoutNormalize: uniq(fineuiWithoutNormalize), |
||||
fineuiWithoutConflict: uniq(fineuiWithoutConflict), |
||||
bundleWithoutNormalize: uniq(bundleWithoutNormalize), |
||||
fineui: uniq(fineui), |
||||
fineuiProxy: uniq(fineuiProxy), |
||||
fineuiWithoutJqueryAndPolyfillJs: uniq(fineuiWithoutJqueryAndPolyfillJs), |
||||
utils: uniq(basicAttachmentMap.utils), |
||||
demo: uniq(demo), |
||||
coreWithoutPlatform: uniq(basicAttachmentMap.core_without_platform), |
||||
coreJs: uniq(coreJs), |
||||
resource: uniq((resource)), |
||||
config: uniq(config), |
||||
bundleCss: uniq(bundleCss), |
||||
}; |
@ -0,0 +1,16 @@
|
||||
const path = require("path"); |
||||
module.exports = { |
||||
DEST: path.resolve(__dirname, "../dist"), |
||||
NODE_MODULES: path.resolve(__dirname, "../node_modules"), |
||||
PRIVATE: path.resolve(__dirname, "../private"), |
||||
BABEL_CONFIG: path.resolve(__dirname, "../babel.config.js"), |
||||
TYPESCRIPT: path.resolve(__dirname, "../typescript"), |
||||
ROUTER: path.resolve(__dirname, "../src/router"), |
||||
SRC: path.resolve(__dirname, "../src"), |
||||
DEMO: path.resolve(__dirname, "../demo"), |
||||
PUBLIC: path.resolve(__dirname, "../public"), |
||||
I18N: path.resolve(__dirname, "../i18n"), |
||||
UI: path.resolve(__dirname, "../ui"), |
||||
MOBILE: path.resolve(__dirname, "../_mobile"), |
||||
FIX: path.resolve(__dirname, "../dist/fix"), |
||||
}; |
@ -0,0 +1,24 @@
|
||||
const path = require('path'); |
||||
const glob = require('glob'); |
||||
|
||||
// const glob = require('fast-glob');
|
||||
|
||||
function uniq(names) { |
||||
return [...new Set(names)]; |
||||
} |
||||
|
||||
const globalExcludes = [ |
||||
"**/*/__test__/*.js", |
||||
]; |
||||
|
||||
function sync(patterns, excludes = []) { |
||||
const ignore = globalExcludes.concat(excludes).map(pattern => path.join(__dirname, "../", pattern).replace(/\\/g, '/')); |
||||
|
||||
return patterns.map(pattern => glob.sync(path.join(__dirname, "../", pattern).replace(/\\/g, '/'), { ignore })).flat(); |
||||
} |
||||
|
||||
|
||||
module.exports = { |
||||
sync, |
||||
uniq, |
||||
}; |
@ -0,0 +1,90 @@
|
||||
const MiniCssExtractPlugin = require("mini-css-extract-plugin"); |
||||
const autoprefixer = require("autoprefixer"); |
||||
const path = require("path"); |
||||
const fs = require("fs"); |
||||
const dirs = require("./dirs"); |
||||
const attachments = require("./attachments"); |
||||
|
||||
let lessVariables = {}; |
||||
if (process.env.LESS_CONFIG_PATH) { |
||||
const lessConfigPath = path.isAbsolute(process.env.LESS_CONFIG_PATH) |
||||
? process.env.LESS_CONFIG_PATH |
||||
: path.resolve(__dirname, "lessconfig", process.env.LESS_CONFIG_PATH); |
||||
|
||||
lessVariables = fs.existsSync(lessConfigPath) ? require(lessConfigPath) || {} : {}; |
||||
} |
||||
|
||||
module.exports = { |
||||
entry: { |
||||
fineui: attachments.fineui, |
||||
}, |
||||
externals: { |
||||
lodash: "_", |
||||
underscore: "_", |
||||
}, |
||||
resolve: { |
||||
mainFields: ["module", "main"], |
||||
extensions: [".js", ".ts"], |
||||
alias: { |
||||
"@": path.resolve(__dirname, "../src"), |
||||
}, |
||||
}, |
||||
|
||||
module: { |
||||
rules: [ |
||||
{ |
||||
test: /\.(jsx?|tsx?)$/i, |
||||
include: [ |
||||
dirs.NODE_MODULES, |
||||
dirs.PRIVATE, |
||||
dirs.PUBLIC, |
||||
dirs.MOBILE, |
||||
dirs.DEMO, |
||||
dirs.I18N, |
||||
dirs.UI, |
||||
dirs.FIX, |
||||
dirs.TYPESCRIPT, |
||||
dirs.SRC, |
||||
], |
||||
exclude: /node_modules(\/|\\)core-js/, |
||||
use: [ |
||||
{ |
||||
loader: "babel-loader", |
||||
options: { |
||||
configFile: dirs.BABEL_CONFIG, |
||||
}, |
||||
}, |
||||
], |
||||
}, |
||||
{ |
||||
test: /\.(css|less)$/, |
||||
use: [ |
||||
MiniCssExtractPlugin.loader, |
||||
{ |
||||
loader: "css-loader", |
||||
options: { |
||||
url: false, |
||||
}, |
||||
}, |
||||
{ |
||||
loader: "postcss-loader", |
||||
options: { |
||||
postcssOptions: { |
||||
plugins: [autoprefixer], |
||||
}, |
||||
}, |
||||
}, |
||||
{ |
||||
loader: "less-loader", |
||||
options: { |
||||
lessOptions: { |
||||
relativeUrls: false, |
||||
modifyVars: lessVariables, |
||||
}, |
||||
}, |
||||
}, |
||||
], |
||||
}, |
||||
], |
||||
}, |
||||
}; |
@ -0,0 +1,11 @@
|
||||
const { merge } = require("webpack-merge"); |
||||
const prod = require("./webpack.prod.js"); |
||||
const attachments = require("./attachments"); |
||||
prod.entry = {}; |
||||
|
||||
module.exports = merge(prod, { |
||||
mode: "production", |
||||
entry: { |
||||
[`${process.env.LESS_FILE_NAME}.min`]: attachments.bundleCss, |
||||
}, |
||||
}); |
@ -0,0 +1,59 @@
|
||||
const webpack = require("webpack"); |
||||
const MiniCssExtractPlugin = require("mini-css-extract-plugin"); |
||||
const TerserPlugin = require("terser-webpack-plugin"); |
||||
const ForkTsCheckerWebpackPlugin = require("fork-ts-checker-webpack-plugin"); |
||||
const common = require("./webpack.common.js"); |
||||
const CssMinimizerPlugin = require("css-minimizer-webpack-plugin"); |
||||
const childProcess = require("child_process"); |
||||
const { merge } = require("webpack-merge"); |
||||
const dirs = require("./dirs"); |
||||
const attachments = require("./attachments"); |
||||
|
||||
function git(command) { |
||||
return childProcess.execSync(`git ${command}`).toString().trim(); |
||||
} |
||||
|
||||
module.exports = merge(common, { |
||||
mode: "production", |
||||
|
||||
entry: { |
||||
"fineui.min": attachments.fineui |
||||
}, |
||||
|
||||
output: { |
||||
path: dirs.DEST, |
||||
filename: "[name].js", |
||||
}, |
||||
|
||||
devtool: "hidden-source-map", |
||||
|
||||
optimization: { |
||||
usedExports: false, |
||||
minimize: true, |
||||
minimizer: [ |
||||
new TerserPlugin({ |
||||
include: /\.min/, |
||||
parallel: true, |
||||
terserOptions: { |
||||
output: { |
||||
comments: false, |
||||
}, |
||||
}, |
||||
}), |
||||
new webpack.BannerPlugin({ |
||||
banner: `time: ${new Date().toLocaleString()}; branch: ${git( |
||||
"name-rev --name-only HEAD" |
||||
)} commit: ${git("rev-parse HEAD")}`,
|
||||
}), |
||||
new CssMinimizerPlugin(), |
||||
], |
||||
}, |
||||
|
||||
|
||||
plugins: [ |
||||
new MiniCssExtractPlugin({ |
||||
filename: "[name].css", |
||||
}), |
||||
new ForkTsCheckerWebpackPlugin({}), |
||||
], |
||||
}); |
Loading…
Reference in new issue