jarvis-react
Version:
React脚手架及命令行工具合集
55 lines (54 loc) • 2.41 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.gulpTransform = void 0;
const path_1 = require("path");
const vinyl_fs_1 = __importDefault(require("vinyl-fs"));
const through2_1 = __importDefault(require("through2"));
const fs_extra_1 = __importDefault(require("fs-extra"));
const typescript_1 = __importDefault(require("typescript"));
const gulp_less_1 = __importDefault(require("gulp-less"));
const gulp_typescript_1 = __importDefault(require("gulp-typescript"));
const gulp_if_1 = __importDefault(require("gulp-if"));
const function_1 = require("../util/function");
const babel_1 = require("./babel");
function transformLess() {
return gulp_if_1.default((file) => path_1.extname(file.path) === '.less', gulp_less_1.default());
}
function transformType(buildType) {
const tsconfig = typescript_1.default.readConfigFile(function_1.resolveProjectFile('tsconfig.json'), (path) => fs_extra_1.default.readFileSync(path, { encoding: 'utf-8' })).config;
return gulp_if_1.default((file) => ['.tsx', '.ts'].includes(path_1.extname(file.path)) &&
!file.path.endsWith('.d.ts') &&
buildType === 'esm', gulp_typescript_1.default({
...tsconfig.compilerOptions,
declaration: true,
}));
}
function transformJS(options) {
const babelConfig = babel_1.getBabelConfig(options);
return through2_1.default.obj((file, env, callback) => {
if (['.tsx', '.ts', '.jsx', '.js'].includes(path_1.extname(file.path)) &&
!file.path.endsWith('.d.ts')) {
const code = babel_1.babelTransform(babelConfig, file);
file.path = file.path.replace(path_1.extname(file.path), '.js');
file.contents = Buffer.from(code);
}
callback(null, file);
});
}
async function gulpTransform(options) {
const { outDir = 'es', buildType = 'esm' } = options;
vinyl_fs_1.default
.src([function_1.resolveProjectFile('src/**/*')], {
allowEmpty: true,
base: function_1.resolveProjectFile('src'),
})
.pipe(transformLess())
.pipe(transformType(buildType))
.pipe(transformJS(options))
.pipe(vinyl_fs_1.default.dest(outDir));
return Promise.resolve();
}
exports.gulpTransform = gulpTransform;