我无法让bundles
在优化版本中工作,我正在尝试加载一些外部预构建捆绑包(不包含在require构建流程输出中)。
在requirejs.config
:
paths: {
'mymodules': '../lib/test-bundle/test-bundle'
},
bundles: {
'mymodules': ['mymodule1', 'mymodule2']
}
test-bundle
内容为:
console.log("defining modules...");
define('mymodule1', ['jquery'], function($) {
console.log('within mymodule1', $.fn.jquery);
return {
test: 'module1'
};
});
define('mymodule2', ['jquery'], function($) {
console.log('within mymodule2', $.fn.jquery);
return {
test: 'module2'
};
});
在paths
的构建配置 mymodules
中,mymodule1
和mymodule2
设置为empty:
(或构建过程失败),我没有使用 build config 中的modules
选项来生成包。
如果我使用这些来源,因为它们一切正常,正如预期的那样。
在内置版本(但未优化)中加载test-bundle
并打印"defining modules"
,然后加载超时mymodule2
:
Error: Failed to load root module (viewmodels/shell). Details: Load timeout for modules: mymodule2(…)
Uncaught Error: Failed to load root module (viewmodels/shell). Details: Load timeout for modules: mymodule2
http://requirejs.org/docs/errors.html#timeout
在构建和优化版本中还有一个错误:
Uncaught ReferenceError: define is not defined
如果在test-bundle
实施requirejs
之前加载了define()
。
我错过了什么或做错了什么?
修改
我已经使用上面的测试创建了一个分支来安装和构建(nodejs
npm
,系统上可能需要grunt-cli
)
git clone https://github.com/xenogenesi/HTMLStarterKitPro
cd HTMLStarterKitPro
git checkout test-bundle
# nodejs npm required on the system (maybe grunt-cli)
npm install # required only once to install node modules
grunt build-only # create a build/ directory and the content
php -S localhost:8888 # to publish the sources as they are
# browse to http://localhost:8888
php -S localhost:7777 -t build # to publish the built versions
# browse to http://localhost:7777 for built but not optimized
# browse to http://localhost:7777/index2.html for built optimized
(有关修改后添加测试包的所有文件,请参阅this commit)
答案 0 :(得分:0)
每个文件只能使用一个定义。如果你想要使用,那么有一个捆绑配置选项,你可以说模块在你已经捆绑的文件中。
正如它所说:
bundle config is for pointing multiple module IDs to a bundle's module ID.
答案 1 :(得分:-1)
所以,显然甚至是require.js
本身,曾经包含在优化版本中的加载器是或者至少表现得不同。
让它工作的一个简单方法是不包含任何加载器并继续使用require来kickstart:
Gruntfile.js
:
- name: 'requireLib',
+ name: false,
index2.html
:
- <script src="app/main-built.js"></script>
+ <script src="lib/require/require.js" data-main="app/main-built"></script>
但是,如果有人知道如何包含加载器并获得预先构建的外部包(一个文件中的多个模块),我想知道并接受答案。