【问题标题】:how to use webpack define a function to dynamic require files如何使用 webpack 定义一个函数来动态请求文件
【发布时间】:2016-02-26 14:36:25
【问题描述】:

我编写了一个lazyLoadModule函数,用于loazyLoad angular.js模块。但是我发现webpack会要求'../modules/'目录下的所有文件,原因可能是var mod = require("../modules/" + module);执行了。在路由器解析中调用函数时,我想要需要文件。

lazyload.js:

exports.lazyLoadModule = function(module){
  var resolver = {
    'lazyLoad': ['$q', '$ocLazyLoad', function($q, $ocLazyLoad){
      var deferred = $q.defer();
      require.ensure([], function (require) {
        var mod = require("../modules/" + module);
        $ocLazyLoad.load({
          name: mod.name,
        });
        deferred.resolve();
      });
      return deferred.promise;
    }]
  }
  return resolver;
}

app.js:

var lazyLoadModule = require('../util/lazyLoad.js').lazyLoadModule;
angular.module('app', ['ui.router', 'oc.lazyLoad', 'ngMaterial']);
angular.module('app')
  .config(['$stateProvider', '$urlRouterProvider', '$locationProvider',
    function($stateProvider, $urlRouterProvider, $locationProvider) {
      $stateProvider
        .state('home', {
          url: '/home',
          template: require('../modules/home/template/home.html'),
          resolve: lazyLoadModule('home/home.js')
        })
        .state('biz1', {
          url: '/biz1',
          template: require('../modules/biz1/template/biz1.html'),
          resolve: lazyLoadModule('biz1/biz1.js')
        })
      $urlRouterProvider.otherwise('home');
      $locationProvider.html5Mode(false);
      $locationProvider.hashPrefix('!');
    }
  ]);
angular.element(document).ready(function() {
  angular.bootstrap(document, ['app'], {
  });
});

【问题讨论】:

    标签: angularjs require webpack lazy-loading


    【解决方案1】:

    您可以使用bundle-loader 来执行此操作:

    (require('bundle?name=[path]!../modules/' + module))(function(mod) {
    });
    

    由于name=[path] 参数,这会将模块目录中的每个文件构建为单独的块。

    【讨论】:

    • '将模块目录中的每个文件构建为一个单独的块',我希望根据模块参数单独的捆绑文件。就像这个问题github.com/webpack/webpack/issues/1667
    • 是的。 chunk 是按需加载的单独文件。由于 name=[path] 参数,每个块的名称将是文件的路径,因此它将包含模块变量的值。所以'../modules/'中的每个文件都会有自己的块。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-10
    • 1970-01-01
    相关资源
    最近更新 更多