enoad-component-web
Version:
针对web端的控件
294 lines (258 loc) • 7.07 kB
JavaScript
/**
* @file fis-conf.js 配置
*/
const path = require("path");
const package = require("./package.json");
const publish = require("./fis-conf-npm");
let fs = require("fs");
fis.get("project.ignore").push("sdk/**", ".*/**");
fis.set("project.files", ["/src/**", "mock/**"]);
fis.match("/mock/**", {
useCompile: false,
});
fis.match("mod.js", {
useCompile: false,
});
console.log("[fis 第一步:开始进行文件匹配]");
fis.match("*.scss", {
parser: fis.plugin("sass", {
sourceMap: false,
}),
rExt: ".css",
});
fis.match("**.svg", {
rExt: ".js",
isJsXLike: true,
isJsLike: true,
isMod: true,
parser: [
fis.plugin("svgr", {
svgProps: {
className: "icon",
},
prettier: false,
dimensions: false,
}),
fis.plugin("typescript", {
importHelpers: true,
esModuleInterop: true,
experimentalDecorators: true,
sourceMap: false,
}),
],
});
fis.match("_*.scss", {
release: false,
});
console.log("[fis 第二步:开始进行node_modules设置]");
// 改用 npm 方案,而不是用 fis-components
fis.hook("node_modules");
// 设置成是模块化 js
fis.match("/node_modules/**.js", {
isMod: true,
});
//development 环境 debug:true
fis.once("compile:start", function (file) {
// if (fis.project.currentMedia() != "publish-sdk") {
process.env.NODE_ENV = "production";
// }else{
// process.env.NODE_ENV = 'development';
// }
});
fis.on("compile:optimizer", function (file) {
if (file.isJsLike && file.isMod) {
let contents = file.getContent();
if (
typeof contents === "string" &&
contents.substring(0, 7) === "define("
) {
//已经完善,从enoad-mod。js中进行关联解析,可以使用模板id找到该控件。;
contents = "enoad._" + contents;
contents = contents.replace(
"function(require, exports, module)",
"function(require, exports, module)"
);
file.setContent(contents);
}
}
});
console.log("[fis 第三步:开始根据文件后缀进行解析]");
fis.match("{*.ts,*.jsx,*.tsx,/src/**.js,/src/**.ts}", {
parser: [
// docsGennerator,
fis.plugin("typescript", {
importHelpers: true,
esModuleInterop: true,
experimentalDecorators: true,
sourceMap: true,
}),
function (content) {
return content.replace(/\b[a-zA-Z_0-9$]+\.__uri\s*\(/g, "__uri(");
},
],
preprocessor: fis.plugin("js-require-css"),
isMod: true,
rExt: ".js",
});
fis.match("*.html:jsx", {
parser: fis.plugin("typescript"),
rExt: ".js",
isMod: false,
});
fis.match("*.less", {
parser: fis.plugin("less"),
rExt: ".css",
});
fis.hook("commonjs", {
sourceMap: false,
extList: [".js", ".jsx", ".tsx", ".ts"],
paths: {
"monaco-editor": "/sdk-tools/loadMonacoEditor",
},
});
fis.match("monaco-editor/**", {
packTo: null,
});
//以下打哪个版本的包。
if (fis.project.currentMedia() === "publish-sdk") {
console.log(
"[开始生成SDK包。进入publish-sdk方法]",
fis.project.currentMedia()
);
var env = fis.media("publish-sdk");
env.get("project.ignore").push("sdk/**", "/assets/scss/**");
env.set("project.files", ["src/**", "/sdk-tools/sdk-placeholder.html"]);
env.match("/dist/src/(**)", {
release: "/$1",
});
env.match("{*.json}", {
release: false,
});
env.match("*.map", {
// release: false,
optimizer: null,
});
env.match("*.scss", {
parser: fis.plugin("sass", {
sourceMap: false,
}),
rExt: ".css",
});
env.match("*.{less,css}", {
rExt: ".css",
});
// env.match("*.png", {
// optimizer: fis.plugin("png-compressor"),
// });
env.match("{/dist/src/index.tsx, *.ts,*.jsx,*.tsx,/src/**.js,/src/**.ts,/node_modules/antd/lib/**.js}", {
parser: [
// docsGennerator,
fis.plugin("typescript", {
importHelpers: true,
esModuleInterop: true,
experimentalDecorators: true,
sourceMap: false,
}),
function (contents, file) {
if (typeof contents !== "string") {
return contents;
}
return contents;
},
],
preprocessor: fis.plugin("js-require-css"),
isMod: true,
rExt: ".js",
});
env.match("/src/icons/**.svg", {
optimizer: fis.plugin("uglify-js"),
moduleId: function (m, path) {
return fis.util.md5("neo-sdk" + path);
},
});
env.match("::package", {
packager: fis.plugin("deps-pack", {
//该配置可以单独提供出去一个工具类。
/*当有多条时,请用数组*/
"enoad-index.lib.js": [
"src/**",
"src/**:deps", // 以及其所有依赖
"antd/**",
"@ant-design/**",
"src/core/util.ts",
"src/core/util.ts:deps", // 以及其所有依赖
],
"enoad.css": [
"src/**",
"src/**:deps", // 以及其所有依赖
],
}),
postpackager: [
fis.plugin("loader", {
useInlineMap: false,
resourceType: "mod",
}),
// require('./src/embed-packager')
],
});
env.match("{*.min.js,monaco-editor/min/**.js}", {
optimizer: null,
});
fis.on("compile:optimizer", function (file) {
if (file.isJsLike && file.isMod) {
let contents = file.getContent();
// 替换 worker 地址的路径,让 sdk 加载同目录下的文件。
// 如果 sdk 和 worker 不是部署在一个地方,请通过指定 MonacoEnvironment.getWorkerUrl
if (
file.subpath === "/src/components/Editor.tsx" ||
file.subpath === "/sdk-tools/loadMonacoEditor.ts"
) {
contents = contents.replace(
/function\sfilterUrl\(url\)\s\{\s*return\s*url;/m,
function () {
return `var _path = '';
try {
throw new Error()
} catch (e) {
_path = (/((?:https?|file)\:.*)$/.test(e.stack) && RegExp.$1).replace(/\\/[^\\/]*$/, '');
}
function filterUrl(url) {
return _path + url.substring(1);`;
}
);
file.setContent(contents);
}
}
});
env.match("/sdk-tools/loader.ts", {
isMod: false,
});
env.match("*", {
domain: ".",
deploy: [
fis.plugin("skip-packed"),
function (_, modified, total, callback) {
let i = modified.length - 1;
let file;
while ((file = modified[i--])) {
if (file.skiped || /\.map$/.test(file.subpath)) {
modified.splice(i + 1, 1);
}
}
i = total.length - 1;
while ((file = total[i--])) {
if (file.skiped || /\.map$/.test(file.subpath)) {
total.splice(i + 1, 1);
}
}
callback();
},
fis.plugin("local-deliver", {
to: "./sdk",
}),
],
});
} else if (fis.project.currentMedia() === "publish") {
console.log("[开始生成npm包。进入publish方法]", fis.project.currentMedia());
publish();
}