enoad-component-web
Version:
针对web端的控件
240 lines • 7.84 kB
JavaScript
/**
* @file fis-conf.js 配置
*/
var path = require("path");
var package = require("./package.json");
var publish = require("./fis-conf-npm");
var 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) {
var 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) {
var 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 = '';\n try {\n throw new Error()\n } catch (e) {\n _path = (/((?:https?|file):.*)$/.test(e.stack) && RegExp.$1).replace(/\\/[^\\/]*$/, '');\n }\n function filterUrl(url) {\n 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) {
var i = modified.length - 1;
var 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();
}
//# sourceMappingURL=fis-conf.js.map