UNPKG

phenomic

Version:

Modern website generator based on the React and Webpack ecosystem.

147 lines (108 loc) 5.63 kB
"use strict"; 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; }; // module.exports is used // eslint-disable-next-line import/default exports.default = function (config) { // log(JSON.stringify(config, null, 2)) var makeWebpackConfigModule = (0, _dynamicRequire2.default)((0, _path.join)(config.cwd, config["webpackConfig"])); var makeWebpackConfig = typeof makeWebpackConfigModule.default === "function" ? makeWebpackConfigModule.default // : makeWebpackConfigModule // @todo remove block below and uncomment line above : typeof makeWebpackConfigModule === "function" ? makeWebpackConfigModule // deprecated : makeWebpackConfigModule.makeConfig; // deprecated if (makeWebpackConfigModule.makeConfig) { (0, _log2.default)("Your webpack config should now directly export a function.\n" + "No need to export a makeConfig() function anymore as webpack@2 " + "natively support a function. " + "(makeConfig() is currently deprecated and support will be remove in a " + "futur release). ", "warning"); } if (typeof makeWebpackConfig !== "function") { throw new Error("Your webpack config must export a function. " + "This function will be called with a single argument " + "(Phenomic configuration object) and must return a valid webpack config."); } config.webpackConfig = makeWebpackConfig(config); config.webpackConfigBrowser = (0, _configBrowser2.default)(config); config.webpackConfigNode = (0, _configNode2.default)(config); var destination = (0, _path.join)(config.cwd, config.destination); _fsExtra2.default.emptyDirSync(destination); process.env.BABEL_ENV = "webpack-" + (process.env.NODE_ENV || "development"); if (config.static) { // Copy static assets to build folder if (config.assets) { (0, _log2.default)("Copying assets", function () { var copyDest = (0, _path.join)(destination, config.assets.route); _fsExtra2.default.copySync(config.assets.path, copyDest); }); } var webpackPromise = function webpackPromise(webpackConfig) { return new Promise(function (resolve, reject) { try { (0, _webpack2.default)(webpackConfig, _log2.default, resolve); } catch (e) { reject(e); } }); }; (0, _log2.default)("Building client files", webpackPromise(config.webpackConfigBrowser)).then(function (clientBundleStats) { // Sometimes, webpack does not throw an error, but send it in the // callback... PRETTY WEIRD RIGHT? // https://github.com/webpack/webpack/issues/2217#issuecomment-249364851 if (clientBundleStats instanceof Error) { throw clientBundleStats; } return (0, _log2.default)("Preparing static build", webpackPromise(config.webpackConfigNode)).then(function () { return clientBundleStats; }); }).then(function (clientBundleStats) { return (0, _log2.default)("Building static files", function () { var staticBuild = (0, _dynamicRequire2.default)((0, _path.join)(config.webpackConfigNode.output.path, config.webpackConfigNode.output.filename)); // transpilation shit // https://github.com/webpack/webpack/issues/4039 return (typeof staticBuild.default === "function" ? staticBuild.default : staticBuild)(_extends({}, config, { collection: _plugin2.default.collection, assetsFiles: (0, _sortAssets2.default)(clientBundleStats.toJson().assetsByChunkName) })); }); }).then(function (files) { return (0, _postBuild2.default)(config, files); }).then(function () { return config.server && (0, _server2.default)(config); }).catch(function (err) { (0, _log2.default)(_chalk2.default.red("Build failed"), "error"); setTimeout(function () { throw (0, _errorFormatter2.default)(err); }, 1); }); } else if (config.server) { (0, _server2.default)(config); } else { throw new Error(_chalk2.default.red("phenomic: CLI needs --static or --server")); } }; var _path = require("path"); var _fsExtra = require("fs-extra"); var _fsExtra2 = _interopRequireDefault(_fsExtra); var _chalk = require("chalk"); var _chalk2 = _interopRequireDefault(_chalk); var _log = require("../_utils/log"); var _log2 = _interopRequireDefault(_log); var _errorFormatter = require("../_utils/error-formatter"); var _errorFormatter2 = _interopRequireDefault(_errorFormatter); var _plugin = require("../loader/plugin.js"); var _plugin2 = _interopRequireDefault(_plugin); var _webpack = require("./webpack"); var _webpack2 = _interopRequireDefault(_webpack); var _sortAssets = require("./webpack/sortAssets.js"); var _sortAssets2 = _interopRequireDefault(_sortAssets); var _server = require("./server.js"); var _server2 = _interopRequireDefault(_server); var _postBuild = require("./post-build.js"); var _postBuild2 = _interopRequireDefault(_postBuild); var _configBrowser = require("./webpack/config.browser.js"); var _configBrowser2 = _interopRequireDefault(_configBrowser); var _configNode = require("./webpack/config.node.js"); var _configNode2 = _interopRequireDefault(_configNode); var _dynamicRequire = require("./dynamic-require.js"); var _dynamicRequire2 = _interopRequireDefault(_dynamicRequire); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }