atool-doc
Version:
Static demo site generator based on atool-build & dora.
143 lines (104 loc) • 5.36 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
exports.default = function (source, asset, dest, cwd, tpl, config) {
var _extends2;
var pkg = require((0, _path.join)(cwd, 'package.json'));
var commonConfig = (0, _getWebpackCommonConfig2.default)({ cwd: cwd, devtool: '#inline-cheap-module-source-map' });
var customConfigPath = (0, _path.join)(cwd, config);
var webpackConfig = (0, _fs.existsSync)(customConfigPath) ? (0, _mergeCustomConfig2.default)(commonConfig, customConfigPath, 'development') : commonConfig;
var entry = getEntry(source);
webpackConfig.entry = entry;
webpackConfig.output.path = (0, _path.join)(cwd, dest);
webpackConfig.cwd = cwd;
webpackConfig.demoSource = source;
webpackConfig.resolve.root = cwd;
webpackConfig.resolve.alias = _extends((_extends2 = {}, _defineProperty(_extends2, pkg.name + '$', (0, _path.join)(cwd, pkg.main || 'index.js')), _defineProperty(_extends2, pkg.name, cwd), _extends2), webpackConfig.resolve.alias);
webpackConfig.resolve.modulesDirectories.push((0, _path.join)(root, 'node_modules'));
webpackConfig.resolveLoader.modulesDirectories.push((0, _path.join)(root, 'node_modules'));
webpackConfig.module.loaders = webpackConfig.module.loaders.map(function (i) {
if (i.loader) {
return _extends({}, i, {
loader: i.loader.replace(/^.*extract-text-webpack-plugin(@\d+(\.\d+)+)?\/loader.js((?!!).)*!/, 'style!')
});
}
if (i.loaders) {
return _extends({}, i, {
loaders: i.loaders.map(function (item) {
return item.replace(/^.*extract-text-webpack-plugin(@\d+(\.\d+)+)?\/loader.js((?!!).)*!/, 'style!');
})
});
}
return i;
});
webpackConfig.module.preLoaders = webpackConfig.module.preLoaders || [];
webpackConfig.module.preLoaders.push({
test: /\.js$/,
loader: 'source-map-loader'
});
webpackConfig.module.preLoaders.push({
test: /\.md$/,
loader: 'babel?' + JSON.stringify(webpackConfig.babel) + '!' + (0, _path.join)(__dirname, './loaders/md-loader') + '?template=' + tpl,
include: _path2.default.join(cwd, source)
});
webpackConfig.module.preLoaders.push({
test: /\.(jsx|js)$/,
loader: 'babel?' + JSON.stringify(webpackConfig.babel) + '!' + (0, _path.join)(__dirname, './loaders/js-loader') + '?template=' + tpl,
include: _path2.default.join(cwd, source)
});
var link = {};
Object.keys(entry).forEach(function (key) {
link[_path2.default.relative(source, key)] = key;
});
webpackConfig.plugins = webpackConfig.plugins.filter(function (plugin) {
return !(plugin instanceof _dependencies.ExtractTextPlugin);
}).concat(new _webpack.ProgressPlugin(function (percentage, msg) {
var stream = process.stderr;
if (stream.isTTY && percentage < 0.71) {
stream.cursorTo(0);
stream.write('\uD83D\uDCE6 ' + msg);
stream.clearLine(1);
} else if (percentage === 1) {
console.log('\nwebpack: bundle build is now finished.');
}
}), new _copyWebpackPlugin2.default([{ from: asset, to: asset }]), new _indexWebpackPlugin2.default({ params: { link: link }, title: 'title' }));
webpackConfig.externals = {};
return webpackConfig;
};
var _path = require('path');
var _path2 = _interopRequireDefault(_path);
var _fs = require('fs');
var _getWebpackCommonConfig = require('atool-build/lib/getWebpackCommonConfig');
var _getWebpackCommonConfig2 = _interopRequireDefault(_getWebpackCommonConfig);
var _mergeCustomConfig = require('atool-build/lib/mergeCustomConfig');
var _mergeCustomConfig2 = _interopRequireDefault(_mergeCustomConfig);
var _webpack = require('atool-build/lib/webpack');
var _dependencies = require('atool-build/lib/dependencies');
var _glob = require('glob');
var _glob2 = _interopRequireDefault(_glob);
var _copyWebpackPlugin = require('copy-webpack-plugin');
var _copyWebpackPlugin2 = _interopRequireDefault(_copyWebpackPlugin);
var _indexWebpackPlugin = require('./index-webpack-plugin');
var _indexWebpackPlugin2 = _interopRequireDefault(_indexWebpackPlugin);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
var root = _path2.default.join(__dirname, '..');
var getDemoFiles = function getDemoFiles(dir) {
return _glob2.default.sync((0, _path.join)(dir, '**/*.{js,jsx,html,md}'));
};
var getEntry = function getEntry(source) {
var files = getDemoFiles(source);
var entry = {};
files.forEach(function (file) {
var ext = _path2.default.extname(file);
var name = _path2.default.basename(file, ext);
var pathWithoutExt = (0, _path.join)(_path2.default.dirname(file), name);
if (ext === '.md' || (ext === '.js' || ext === '.jsx') && files.indexOf(pathWithoutExt + '.html') !== -1) {
entry[pathWithoutExt] = file;
}
});
return entry;
};
module.exports = exports['default'];