Webpack loader:内联或嵌入所需的,省略了最终的jsonp函数

时间:2016-09-13 06:36:46

标签: webpack

让我们假设下一个文件:

a.html

<span>A</span>

b.js

module.exports = function(){};

wrap.js

module.exports = {
  html: require('./a.html'), // to be inlined
  class: require('wrap-class'), // does not exists
  func: require('./b'),
};

main.js

require('./wrap');

让我们假设下一个加载器:

总结loader.js

module.exports = function (source){
  // I would like to get the loaded contents
  // from specific childs or dynamically loaded
  // require('./a.html') -> inlined or embedded
  // require('class-exists') -> resolve to something depending on the
  // source code `source` and the contents of the html (`a.html`)
  return source; // modify the source
}

最后,我希望将main.js作为一个捆绑包时使用:

jsonp(...,[
  /* 0 */ /* ./main.js */
  function(module, exports, __webpack_require__){
    __webpack_require__(/*! ./wrap.js */ 1);
  },
  /* 1 */ /* ./wrap.js */
  function(module, exports, __webpack_require__){
    module.exports = {
      html: '<span>A</span>',
      class: 'cls-wrap cls-based-on-a-html-and-wrap-js',
      func: __webpack_require_(/*! ./b.js */ 2),
    }
  },
  /* 2 */ /* ./b.js */
  function(module, exports, __webpack_require__){
    module.exports = function(){};
  }
]);

问题

我如何实现:

  1. require中当前source内的特定wrap-loader.js被内联或嵌入source本身,而不会产生新功能(让我们说,因为它赢了'任何其他人都可以重复使用,在这种情况下,它可以再次内联)。在上面的示例中:a.html
  2. source中的wrap-loader.js根据其他数据(例如source本身和a.html的内容)动态解析模块并将其插入sourcerequire('wrap-class'))。
  3. 试验

    this.resolveSyncthis.resolve但它们与代码中的require('something')没有相同的内容(例如,yaml-loader,html-loader像javascript一样加载,至少发出错误)。

0 个答案:

没有答案