@yuebai008/cli
Version:
Command line interface for rapid qg-minigame development
107 lines (99 loc) • 7.07 kB
JavaScript
"use strict";var _typeof = require("@babel/runtime-corejs2/helpers/typeof");var _Object$keys = require("@babel/runtime-corejs2/core-js/object/keys");var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs2/core-js/object/get-own-property-symbols");var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor");var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptors");var _Object$defineProperties = require("@babel/runtime-corejs2/core-js/object/define-properties");var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");var _WeakMap = require("@babel/runtime-corejs2/core-js/weak-map");var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");_Object$defineProperty(exports, "__esModule", { value: true });exports["default"] = exConfig;var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
var _fs = _interopRequireDefault(require("fs"));
var _path = _interopRequireDefault(require("path"));
var _copyWebpackPlugin = _interopRequireDefault(require("copy-webpack-plugin"));
var paths = _interopRequireWildcard(require("./paths.js"));
var _core = _interopRequireDefault(require("@babel/core"));function _getRequireWildcardCache(e) {if ("function" != typeof _WeakMap) return null;var r = new _WeakMap(),t = new _WeakMap();return (_getRequireWildcardCache = function _getRequireWildcardCache(e) {return e ? t : r;})(e);}function _interopRequireWildcard(e, r) {if (!r && e && e.__esModule) return e;if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e };var t = _getRequireWildcardCache(r);if (t && t.has(e)) return t.get(e);var n = { __proto__: null },a = _Object$defineProperty && _Object$getOwnPropertyDescriptor;for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) {var i = a ? _Object$getOwnPropertyDescriptor(e, u) : null;i && (i.get || i.set) ? _Object$defineProperty(n, u, i) : n[u] = e[u];}return n["default"] = e, t && t.set(e, n), n;}function ownKeys(e, r) {var t = _Object$keys(e);if (_Object$getOwnPropertySymbols) {var o = _Object$getOwnPropertySymbols(e);r && (o = o.filter(function (r) {return _Object$getOwnPropertyDescriptor(e, r).enumerable;})), t.push.apply(t, o);}return t;}function _objectSpread(e) {for (var r = 1; r < arguments.length; r++) {var t = null != arguments[r] ? arguments[r] : {};r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {(0, _defineProperty2["default"])(e, r, t[r]);}) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {_Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r));});}return e;}
/**
* 获取小游戏工程目录的minigame.config.js的配置
* @param {Object} webpackConfig webpack的配置文件
* @param {Object} options 提供一些参数
* @param {String} options.context 小游戏工程目录
* @param {String} options.src 小游戏工程src目录
* @param {String} options.build 小游戏工程的编译目录
*/
function exConfig(webpackConfig, options) {
// 如果小游戏工程目录存在minigame.config.js,就以此为准,没有再判断webpack.config.js
if (_fs["default"].existsSync(paths.PROJECT_CONFIG)) {
try {
var _require = require(paths.PROJECT_CONFIG)(options),_require$externals = _require.externals,externals = _require$externals === void 0 ? [] : _require$externals,_require$copyFile = _require.copyFile,copyFile = _require$copyFile === void 0 ? [] : _require$copyFile;
var exts = webpackConfig.externals || {};
var copys = [];
externals.map(function (e) {
// 把 externals添加到webpack配置中去
exts[e.module_name] = "commonjs ".concat(e.module_path);
var inputFilePath = _path["default"].join(options.context, e.module_from);
var outputFilePath = _path["default"].join(options.build, e.module_path);
if (!e.module_from.endsWith('engine/js/main.js')) {
copys.push({
from: _path["default"].join(options.context, e.module_from),
to: _path["default"].join(options.build, e.module_path)
});
return;
}
try {
// babel将src下内容转换下,到dist下
if (!_fs["default"].existsSync(options.build)) {
_fs["default"].mkdirSync(options.build);
}
var code = _fs["default"].readFileSync(inputFilePath, 'utf8');
var result = _core["default"].transformSync(code, {
filename: e.module_from,
cwd: __dirname, // 设置工作目录
presets: ['@babel/preset-env'],
plugins: [
['@babel/plugin-transform-runtime', {
// Optionally configure helpers to false or use the corejs option
helpers: false // This stops adding runtime helpers
// corejs: false
}]]
});
// babel将src下内容转换下,到dist下
if (!_fs["default"].existsSync(_path["default"].dirname(outputFilePath))) {
_fs["default"].mkdirSync(_path["default"].dirname(outputFilePath), { recursive: true });
}
_fs["default"].writeFileSync(outputFilePath, result.code);
console.log("Successfully transpiled ".concat(inputFilePath, " to ").concat(outputFilePath));
} catch (error) {
console.error("Error code: ".concat(error.message, " ").concat(inputFilePath, " to ").concat(outputFilePath));
// 把 externals添加到webpack配置中去
copys.push({
from: _path["default"].join(options.context, e.module_from),
to: _path["default"].join(options.build, e.module_path)
});
}
});
if (copys.length) {
webpackConfig.externals = exts;
// 把配置的 externals 文件 拷贝到 build目录
webpackConfig.plugins.push(new _copyWebpackPlugin["default"]({
patterns: copys.map(function (config) {return _objectSpread({},
config);}
)
}));
}
// 复制文件到build的逻辑,没有被代码引入,但是打包需要打的文件路径
var copyFiles = copyFile.map(function (e) {
return {
from: _path["default"].join(options.context, e.module_from),
to: _path["default"].join(options.build, e.module_path)
};
});
if (copyFiles.length) {
webpackConfig.plugins.push(new _copyWebpackPlugin["default"]({
patterns: copyFiles.map(function (config) {return _objectSpread({},
config);}
)
}));
}
} catch (e) {
console.error(e);
}
} else if (_fs["default"].existsSync(paths.PROJECT_WEBPACK_CONFIG)) {
try {
require(paths.PROJECT_WEBPACK_CONFIG).postHook(webpackConfig, options);
} catch (e) {
console.error(e);
}
}
}