UNPKG

me-module-utils

Version:

Me Module utils

57 lines (47 loc) 1.61 kB
import {join} from 'path'; import browserEnv from 'browser-env'; import {createEmptyMe} from './meFactory'; /** * Mock browser environment * * @param {Object} options 配置 * @param {string} options.basePath 前端脚本根路径 * @returns {restorePolyfill} */ export default function env({basePath}) { const resolve = p => join(basePath, p); // 初始化之前,重置 `me.js` 状态 // 主要是重置 `me._modules`, 保存了上一次解析的模块依赖关系 global.me = 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 browserEnv(); // `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; }; }