UNPKG

nobuilder

Version:

nobuilder

112 lines (92 loc) 3.41 kB
// 设置 ENV process.env.NODE_ENV = 'production'; process.env.BABEL_ENV = 'production'; // 保证 unhandle process 能抛出异常 process.on('unhandledRejection', (err) => { throw err; }); // 加载环境变量 require('./lib/env'); const sass = require('node-sass'); const webpack = require('webpack'); const path = require('path'); const babel = require('babel-core'); const assert = require('assert'); const chalk = require('chalk'); const glob = require('glob'); const fs = require('fs-extra'); const { rmdir, mkdir } = require('./utils'); const getUmdConfig = require('./lib/webpack.umd'); const babelConfig = require('./lib/babelConfig'); const paths = require('./lib/paths'); const umdJson = require(paths.umd); const umdConfig = getUmdConfig(umdJson); const callback = (err, stats) => { if (err) { console.error(err.stack || err); if (err.details) console.error(err.details); return; } console.log(stats.toString({ chunks: false, // Makes the build much quieter chunkModules: false, colors: true, // Shows colors in the console children: false, builtAt: true, modules: false, })); }; const ES_PATTERN = /\.(js|jsx|mjs)$/; const CSS_PATTERN = /\.(scss)$/; async function run(basedir) { const srcDir = path.join(basedir, 'src'); const destDir = path.join(basedir, 'dist'); assert(fs.existsSync(srcDir), `${srcDir} directory should exists`); console.log(chalk.cyan('Starting to transform src files to dist ...\n')); // remove old destDir console.log(' - %s %s', chalk.yellow('remove'), destDir); await rmdir(destDir); await mkdir(destDir); // transform const files = glob.sync('**/*.*', { cwd: srcDir, }); for (const file of files) { const srcFile = path.join(srcDir, file); let destFile = path.join(destDir, file); // 如果是 ES 代码, 就 transform if (file.match(ES_PATTERN)) { console.log(' - %s %s', chalk.green('transform'), file); destFile = destFile.replace(ES_PATTERN, '.js'); const content = fs.readFileSync(srcFile, 'utf8'); await mkdir(path.dirname(destFile)); fs.writeFileSync(destFile, babel.transform(content, babelConfig).code); } else if (file.match(CSS_PATTERN)) { console.log(' - %s %s', chalk.green('scss'), file, srcFile); destFile = destFile.replace(CSS_PATTERN, '.css'); let content = fs.readFileSync(srcFile, 'utf8'); content = content.replace(/@import ('|")~/g, "@import 'node_modules/"); await mkdir(path.dirname(destFile)); const rawScss = sass.renderSync({ file: srcFile, data: content, }); const cssContent = rawScss.css.toString('utf-8'); fs.writeFileSync(destFile, cssContent); } else { console.log(' - %s %s', chalk.green('copy'), file); await fs.copy(srcFile, destFile); } } console.log(chalk.green('\nTransform successfully!')); console.log(chalk.green('\nexecuting webpack to build umd...')); try { webpack(umdConfig).run(callback); } catch (e) { console.log(e); } } run(process.cwd()).catch((err) => { console.error(chalk.red(err.stack || err)); process.exit(1); });