我认为您不需要所有 1.5mb 来向用户展示初始应用程序。因此,您可以在代码中要求某些带有条件的部分。所以而不是:
define(['module1','module2','module3','module4'], function(m1, m2, m3, m4){
if(m1.someCondition){
m2.start()
}else{
m3.start()
}
})
您可以使用以下方式加载应用程序的某些部分require
:
define(['module1'], function(m1){
m1.start();
if(m1.someCondition){
var name = 'module2'
m2 = require(name)
m2.start()
}else{
var name = 'module3'
m3 = require(name)
m3.start()
}
})
请注意,只有当传递的名称不是字符串时,优化器才会忽略模块
从文档:
优化器只会组合在传递给顶层 require 和 define 调用的字符串文字数组中指定的模块,或者在简化的 CommonJS 包装中组合 require('name') 字符串文字调用。因此,它不会找到通过变量名加载的模块:
var mods = someCondition ? ['a', 'b'] : ['c', 'd'];
> require(mods);