requrie 可以异步加载,但怎么做到同步加载,原理是什么?

var es = {};
es.module = {};
es.module.exports = {};
es.require = function(src, fn) {
  var js = document.createElement('script');
  js.src = src;
  js.charset = 'utf-8';
  document.querySelector('head').appendChild(js);
  js.onload = function() {
    fn(es.module.exports);
  }
};
es.define = function(fn) {
  fn();
};
es.require('a.js', function(a) {
  a();
});

////////////////////如果我想这样写就会报错////////////////////////////
var a = es.require('a.js');
a();//同步加载就会报错,请问require内部应该怎么写可以实现同步加载??

a.js

es.define(function() {
  
  function a() {
    console.log('a()...');
  }
  es.module.exports = a;
});
阅读 8.9k
2 个回答

同问,我也想知道requirejs怎么同步请求js

先说bundle好了,requirejs不是“同步”请求js,而是通过r.js扫描一遍你的代码,理清楚依赖关系后,把所有模块按照依赖加载的顺序打包合并成一个文件。

再说如果就是不想bundle,但又想写着好像commonjs的代码

var userFactory =  require('./UserFactory');
userFactory.creatUser();

那你应该看commonjs-wrapper

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进