UNPKG

enoad-component-web

Version:

针对web端的控件

294 lines (258 loc) 7.07 kB
/** * @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(); }