| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- const config = require('../src/config.json');
- const path = require('path');
- const fs = require('fs');
- const sourceDir = path.resolve(__dirname, './../tsc/type/src/packages') // 拷贝的源文件夹
- const toDir = path.resolve(__dirname, './../dist/types'); // ./../dist
- const basePath = path.join(toDir, '__VUE');
- const fileList = [];
- let packages = [];
- const preContent = `
- declare type Install<T> = T & {
- install(app: import('vue').App): void;
- };\n`;
- const start = 'declare const _default:';
- const end = ';\nexport default _default;\n';
- const regex = new RegExp(`${start}([\\s\\S]*?)${end}`);
- const getCompList = (basePath) => {
- const files = fs.readdirSync(basePath);
- files.forEach((filename) => {
- const filedir = path.join(basePath, filename);
- //根据文件路径获取文件信息,返回一个fs.Stats对象
- const stats = fs.statSync(filedir);
- const isFile = stats.isFile();//是文件
- const isDir = stats.isDirectory();//是文件夹
- if(isFile){
- fileList.push(filedir);
- }
- if(isDir){
- getCompList(filedir);//递归,如果是文件夹,就继续遍历该文件夹下面的文件
- }
- });
- }
- const getCompName = (name) => {
- if(!packages.length) {
- config.nav.forEach((item, index) => {
- packages = packages.concat(item.packages);
- });
- }
- const packageName = packages.find((item) => item.name.toLowerCase() === name.toLowerCase());
- return packageName ? packageName.name : ''
- }
- const getLocale = () => {
- const source = path.join(sourceDir, 'locale');
- const to = path.resolve(__dirname, './../dist/packages/locale');
- fs.cp(source, to, { recursive: true }, (err) => {
- if(err) {
- console.error(err);
- return;
- }
- })
- }
- fs.cp(sourceDir, toDir, { recursive: true }, (err) => {
- if(err) {
- console.error(err);
- return;
- }
- const oldName = path.join(toDir, 'nutui.taro.vue.build.d.ts');
- const newName = path.join(toDir, 'index.d.ts');
- fs.rename(oldName, newName, (err) => {
- if(err) {
- console.error(err);
- }
- })
- getCompList(basePath);
- fileList.forEach((item, index) => {
- const content = fs.readFileSync(item).toLocaleString();
- const inputs = content.match(regex);
-
- if(inputs && inputs.length) {
- let name = item.substring(0, item.lastIndexOf('/'));
- name = name.substring(name.lastIndexOf('/') + 1);
- const componentName = getCompName(name);
- if(componentName) {
- let remain = `
- declare module 'vue' {
- interface GlobalComponents {
- Nut${componentName}: typeof _default;
- }
- }`;
- let changeContent = content.replace(regex, `${preContent}${start} Install<${inputs[1]}>${end}${remain}`)
- fs.writeFileSync(item, changeContent);
- }
- }
- });
- //国际化处理
- getLocale();
- });
|