gpt4 book ai didi

javascript - RequireJS 路径配置

转载 作者:数据小太阳 更新时间:2023-10-29 05:15:57 25 4
gpt4 key购买 nike

我的 RequireJS 开发配置(在“index.html”文件中)是:

<script src="require-2.1.5.min.js"></script>
<script>
require.config({
baseUrl: 'js',
paths: {
angular: 'libraries/angular-1.1.5.min',
jquery: 'libraries/jquery-2.0.0.min',
underscore: 'libraries/underscore-1.4.4.min',
...
zeroclipboard: 'plugins/zeroclipboard-1.0.7.min',
tablesorter: 'plugins/jquery.tablesorter-2.9.1.min',
...
},
shim: {
'angular': {
exports: 'angular'
},
'underscore': {
exports: '_'
}
},
packages: [
{
name: 'index',
location: 'app/index',
main: 'main'
}
]
});

require(['index']);
</script>

但在生产环境中,我只有 2 个用于库和插件的串联文件:

js/libraries.js // all jQuery, AngularJS, RequireJS, Underscore and other libraries concatenated
js/plugins.js // all plugins (already an AMD modules, no need for "shim" config) concatenated

那么,现在我该如何编写我的配置“路径”?我没有任何'libraries/angular-1.1.5.min.js' 和其他路径。

我的解决方案是这样写:

    paths: {
angular: 'libraries',
underscore: 'libraries'
}

我将 AngularJS 和 Underscore 与 'libraries.js' 文件相关联,并且一切正常。 (不需要 jQuery 和所有插件——它们已经是 AMD 模块)。

但这是编写路径的正确方法吗?在我看来,我的解决方案有点肮脏,不是最佳实践解决方案。

我的 r.js 构建过程:

({
baseUrl: 'scripts',
paths: {
jquery: 'jquery-2.0.0.min',
...
tablesorter: 'jquery.tablesorter-2.0.5.min',
zeroclipboard: 'zeroclipboard-1.0.7.min'
},
name: 'foo/main',
exclude: [
'angular',
'jquery',
...
'tablesorter',
'zeroclipboard'
],
optimize: 'uglify',
out: 'production/js/foo.js'
})

更新 1:

我想要的:

www.mysite.com/about.html:

<script src="js/libraries.js"></script><-- jQuery (already AMD), AngularJS (not AMD), RequireJS, Underscore (not AMD) and other libraries already here, only 1 http request needed //-->
<script src="js/plugins.js"></script><-- all AMD //-->
<script>
require.config({
baseUrl: 'js',
paths: {
angular: WHAT I NEED TO WRITE HERE?,
underscore: WHAT I NEED TO WRITE HERE?
},
shim: {
'angular': {
exports: 'angular'
},
'underscore': {
exports: '_'
}
},
packages: [
{
name: 'about',
location: 'js',
main: 'about'
}
]
});

require(['about']); // will load "js/about.js"
</script>

更新 2:

好的,“优先级”很清楚,所以,我不需要第一个和第二个 «script» 标签(但我需要将“Require.js”与“libraries.js”分开)——RequireJS 将加载他们自动。但是,对于“libraries.js”文件中的非 AMD 库应该怎么办呢?

AngularJS 和 UnderscoreJS 是非 AMD 模块,这就是我必须使用“shim”的原因,对吗?但是为了让“shim”工作,我还需要使用“paths”,所以“shim”可以找到被填充的模块,对吧?但我仍然只有 1 个文件 — “libraries.js”,我无法在“路径”选项中写入它……真的卡住了……

最佳答案

为了预加载公共(public)库代码,您应该使用优先级配置选项。你可以把这样的东西放在你的 foo/main.js 文件中

require.config({
priority: ["libraries", "plugins"]
});

然后您的构建文件可能如下所示。库和插件文件应该包含一个 define 语句,定义所有被认为是通用/下载一次的依赖项。

({
baseUrl: 'scripts',
paths: {
jquery: 'jquery-2.0.0.min',
...
tablesorter: 'jquery.tablesorter-2.0.5.min',
zeroclipboard: 'zeroclipboard-1.0.7.min'
},
modules: [
{
name: 'foo/main'
excludes: ...
},
{
name: 'libraries'
},
{
name: 'plugins'
}
],
optimize: 'uglify',
out: 'production/js/foo.js'
})

关于javascript - RequireJS 路径配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16825405/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com