| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- #!/usr/bin/env node
- let target = process.argv[2];
- if (!target) {
- console.error('缺少 nutui or nutui-taro 参数!');
- return;
- }
- const config = require('../src/config.json');
- const packageConfig = require('../package.json');
- const path = require('path');
- const fs = require('fs-extra');
- // 获取依赖关系
- const styleMap = new Map();
- const tasks = [];
- let outputFileEntry = ``;
- let components = [];
- // import Locale from './packages/locale';\n
- config.nav.forEach((item) => {
- item.packages.forEach((element) => {
- styleMap.set(element.name, {
- name: element.name,
- children: element.styleDeps
- });
- // gen entry
- if (element.exclude != true) {
- let outputMjs = '';
- if (element.type == 'methods' && target == 'nutui') {
- outputMjs = `import _${element.name} from '../_es/${element.name}.js';
- import { show${element.name} } from '../_es/${element.name}.js';
- const treeshaking = (t) => t;
- const ${element.name} = treeshaking(_${element.name});
- export { ${element.name}, show${element.name} };`;
- } else {
- outputMjs = `import _${element.name} from '../_es/${element.name}.js';
- const treeshaking = (t) => t;
- const ${element.name} = treeshaking(_${element.name});
- export { ${element.name} };`;
- }
- tasks.push(
- fs.outputFile(path.resolve(__dirname, `../dist/packages/${element.name}/index.mjs`), outputMjs, 'utf8', () => {
- // console.log('')
- })
- );
- let folderName = element.name.toLowerCase();
- outputFileEntry += `export * from "./packages/${folderName}/index.mjs";\n`;
- components.push(element.name);
- }
- });
- });
- outputFileEntry += components.map(name => `import { ${name} } from "./packages/${name.toLowerCase()}/index.mjs";`).join('\n');
- outputFileEntry += `\nexport { Locale } from "./packages/locale/lang";
- export function install(app) {
- const packages = [${components.join(',')}];
- packages.forEach((item) => {
- if (item.install) {
- app.use(item);
- } else if (item.name) {
- app.component(item.name, item);
- }
- });
- }
- export const version = '${packageConfig.version}';
- export default {
- install,
- version
- };`;
- tasks.push(
- fs.outputFile(path.resolve(__dirname, `../dist/nutui.es.js`), outputFileEntry, 'utf8', () => {
- // console.log('')
- })
- );
- styleMap.forEach((value) => {
- if (value.children && value.children.length > 0) {
- value.children.forEach((item, index) => {
- value.children[index] = styleMap.get(item);
- });
- }
- });
- const getAllDeps = (styleObj, key) => {
- const value = styleObj;
- if (value.children?.length === 0) {
- return [value.name];
- } else {
- let deps = [];
- value.children?.forEach((item) => {
- if (key === item.name) {
- console.error('generate-style-deps: 存在循环引用', key);
- return [];
- }
- deps = deps.concat(getAllDeps(item, key));
- });
- deps.unshift(value.name);
- return [...new Set(deps)];
- }
- };
- styleMap.forEach((value, key) => {
- const name = key.toLowerCase();
- let deps = getAllDeps(value, key);
- deps = deps.filter((component) => {
- return component !== key;
- });
- // gen style
- const outputStyleMjs = `import '../../styles/reset.css';\n${deps
- .map((component) => {
- return `import '../${component.toLowerCase()}/index.scss';\n`;
- })
- .reverse()
- .join('')}import './index.scss';\n`;
- tasks.push(
- fs.outputFile(path.resolve(__dirname, `../dist/packages/${name}/style.mjs`), outputStyleMjs, 'utf8', () => {
- // console.log('')
- })
- );
- });
- Promise.all(tasks);
|