/**
  * Recursively copy a directory and treat all files as templates
  *
  * @param {String} src Source
  * @param {String} dest Destination
  * @param {Object} context Context
  * @private
  */
 _templateDirectory(src, dest, context) {
     const srcRoot = this.templatePath(src);
     const destRoot = this.destinationPath(dest);
     fs.walkSync(srcRoot).forEach(file => {
         const localPath = file.substr(srcRoot.length);
         this._mkdirp(path.join(destRoot, path.dirname(localPath)));
         this._template(file, path.join(destRoot, localPath), context);
     }, this);
 }
Example #2
0
	_scanDir: function (sPath, sExt) {
		sExt = sExt || '*';
		var aScan = [];
		var aList = [];
		try { aList = oFS.walkSync(sPath); } catch (e) {}
		if (!aList.length) { return aScan; }
		for (var i = 0; i < aList.length; i++) { 
			var sFile = aList[i];
			var sItem = oPath.basename(sFile);
			if (sItem !== '.' && sItem !== '..' && !oFS.statSync(sFile).isDirectory()) {
				sItem = sItem.split('.');
				sItem.shift();
				if (sExt === '*' || sItem.join('.') === sExt) { aScan.push(sFile); }
			}
		}
		return aScan;
	},
  .forEach(function (cName) {
    // 忽略掉 业务组件目录 里的同名组件
    // 比如: biz-components 有 button 目录,则意味着您要【自己完全重写实现】button 组件逻辑
    if (bizCs.indexOf(cName) > -1) {
      return;
    }

    var sourceDir = path.join(__dirname, './ant-design-mobile/components', cName);
    var destDir = path.join(destC, cName);

    if (fs.existsSync(path.join(sourceDir, './index.tsx'))) {
      // 先 清空或创建 相应 cName 目录
      fs.emptyDirSync(destDir);

      // 创建 相应 cName 目录下的 index.tsx 文件
      fs.writeFileSync(
        path.join(destDir, '/index.tsx'),
        `import ${camelCase(cName)} from 'antd-mobile/lib/${cName}';\n` +
        `export default ${camelCase(cName)};\n`
      );

      // 创建 相应 cName 目录下的 examples & docs md 文件 (只是从 antd 拷贝过来)
      fs.copySync(path.join(sourceDir, '/index.en-US.md'), path.join(destDir, '/index.en-US.md'));
      fs.copySync(path.join(sourceDir, '/index.zh-CN.md'), path.join(destDir, '/index.zh-CN.md'));
      fs.copySync(path.join(sourceDir, '/demo'), path.join(destDir, '/demo'));

      // 删除 用于 react-native 的 demo 文件
      del.sync([path.join(destDir, '/demo/*.tsx')]);

      // 改变 demo 文件中的 `antd-mobile` 组件库名、为 新的 libName
      fs.walkSync(path.join(destDir, '/demo')).forEach(function (file) {
        fs.writeFileSync(file, fs.readFileSync(file).toString()
          .replace(/\sfrom\s'antd-mobile'/g, ` from '${libName}'`));
      });

      // 同步 带有 locale 目录的组件
      if (fs.existsSync(path.join(sourceDir, './locale'))) {
        var localeDir = path.join(destDir, './locale');
        // 在 dest 目录里 清空或创建 locale 目录
        fs.emptyDirSync(localeDir);
        // 暂时 先创建 en 和 zh 两个文件  todos
        fs.writeFileSync(path.join(localeDir, '/en_US.tsx'),
          `export { default } from 'antd-mobile/lib/${cName}/locale/en_US';\n`);
        fs.writeFileSync(path.join(localeDir, '/zh_CN.tsx'),
          `export { default } from 'antd-mobile/lib/${cName}/locale/zh_CN';\n`);
      }

      // 创建 相应 cName 目录下的 style 样式文件
      var styleDir = path.join(destDir, './style');
      fs.emptyDirSync(styleDir);
      if (fs.existsSync(path.join(sourceDir, './style/index.less'))) {
        fs.writeFileSync(path.join(styleDir, './index.less'),
          `@import '~antd-mobile/lib/${cName}/style/index.less';`);
      }
      var indexStyle = path.join(sourceDir, './style/index.tsx');
      fs.copySync(indexStyle, path.join(styleDir, '/index.tsx'));

      // 一个组件可能在 style/index.tsx 里标明依赖另一个组件样式,此时需要确保 被依赖的组件 存在
      //       var ct = fs.readFileSync(indexStyle);
      //       if (ct.toString().split('\n').filter(function(i) { return i.trim() }).length > 2) {
      //         console.log(`
      // ========== Note: ${cName} need the following component styles ====
      // ${ct}==============================================================
      //         `);
      //       }
    }
  });