me-module-utils
Version:
Me Module utils
69 lines (50 loc) • 1.81 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = env;
var _path = require("path");
var _browserEnv = _interopRequireDefault(require("browser-env"));
var _meFactory = require("./meFactory");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* Mock browser environment
*
* @param {Object} options 配置
* @param {string} options.basePath 前端脚本根路径
* @returns {restorePolyfill}
*/
function env({
basePath
}) {
const resolve = p => (0, _path.join)(basePath, p); // 初始化之前,重置 `me.js` 状态
// 主要是重置 `me._modules`, 保存了上一次解析的模块依赖关系
global.me = (0, _meFactory.createEmptyMe)(); // 删除缓存,重新加载me loader
delete require.cache[resolve('lib/me.js')];
delete require.cache[resolve('lib/me.ext.js')];
delete require.cache[resolve('lib/require.js')];
delete require.cache[resolve('lib/merge_require.js')];
delete require.cache[resolve('app/app.js')]; // Polyfill browser env
(0, _browserEnv.default)(); // `me.js` 加载过程中,`<header>` 中需要一个 `<script>` 标签
const script = document.createElement('script');
script.setAttribute('version', '1.0');
document.head.appendChild(script);
const restorePolyfill = backupMePolyfill(); // 加载 `me.js`
require(resolve('lib/me.js'));
require(resolve('lib/me.ext.js'));
require(resolve('lib/require.js'));
require(resolve('lib/merge_require.js'));
require(resolve('app/app.js'));
restorePolyfill();
}
/**
* Backup `me.js` polyfill
*
* @returns {restorePolyfill}
*/
function backupMePolyfill() {
const bind = Function.prototype.bind;
return function restorePolyfill() {
Function.prototype.bind = bind;
};
}
;