RequireJS:开发环境命名空间,避免与其他AMD lib冲突
RequireJS: namespace in development environment to avoid conflict with other AMD lib
我正在做的项目使用了requireJS。效果很好,当我们想要构建它时,我们使用:
({
// ..
namespace: 'projectCodeName',
// ..
});
但有时我需要加载另一个库,该库也使用 requireJS,但没有命名空间:(
)。
我是生产,我没有任何问题,因为我自己的 requirejs
可以在 window.projectCodeName.require()
.
上访问
但在开发中,一切都没有预期的那样。
我发现我可以构建 requireJS without uglyfying,但是仍然很遗憾丢失文件匹配、行号等
我可以在带有命名空间的开发模式下使用 requireJS 吗?类似于:
<script data-namespace="projectCodeName" src="bower_components/requirejs/require.js"></script>
干杯
编辑:
我尝试手动执行此操作,例如:
window.projectCodeName = window.projectCodeName || {};
window.projectCodeName.require = window.require;
window.projectCodeName.requirejs = window.requirejs;
window.projectCodeName.define = window.define;
delete require;
delete requirejs;
delete define;
不幸的是,后者 delete require
不起作用,它 returns 错误,这意味着这是一个 non-configurable property.
我以为requirejs非常擅长避免全局命名空间问题,但它却总是带来麻烦。真是又烦又失望。
有 multiversion support in requirejs,因此您可以为每个项目设置一个上下文。这是来自文档页面的示例。这是你想要的吗?
var reqOne = require.config({
context: "version1",
baseUrl: "version1"
});
reqOne(["require", "alpha", "beta",],
function(require, alpha, beta) {
log("alpha version is: " + alpha.version); //prints 1
log("beta version is: " + beta.version); //prints 1
setTimeout(function() {
require(["omega"],
function(omega) {
log("version1 omega loaded with version: " +
omega.version); //prints 1
}
);
}, 100);
});
var reqTwo = require.config({
context: "version2",
baseUrl: "version2"
});
reqTwo(["require", "alpha", "beta"],
function(require, alpha, beta) {
log("alpha version is: " + alpha.version); //prints 2
log("beta version is: " + beta.version); //prints 2
setTimeout(function() {
require(["omega"],
function(omega) {
log("version2 omega loaded with version: " +
omega.version); //prints 2
}
);
}, 100);
});
我正在做的项目使用了requireJS。效果很好,当我们想要构建它时,我们使用:
({
// ..
namespace: 'projectCodeName',
// ..
});
但有时我需要加载另一个库,该库也使用 requireJS,但没有命名空间:(
)。
我是生产,我没有任何问题,因为我自己的 requirejs
可以在 window.projectCodeName.require()
.
但在开发中,一切都没有预期的那样。
我发现我可以构建 requireJS without uglyfying,但是仍然很遗憾丢失文件匹配、行号等
我可以在带有命名空间的开发模式下使用 requireJS 吗?类似于:
<script data-namespace="projectCodeName" src="bower_components/requirejs/require.js"></script>
干杯
编辑:
我尝试手动执行此操作,例如:
window.projectCodeName = window.projectCodeName || {};
window.projectCodeName.require = window.require;
window.projectCodeName.requirejs = window.requirejs;
window.projectCodeName.define = window.define;
delete require;
delete requirejs;
delete define;
不幸的是,后者 delete require
不起作用,它 returns 错误,这意味着这是一个 non-configurable property.
我以为requirejs非常擅长避免全局命名空间问题,但它却总是带来麻烦。真是又烦又失望。
有 multiversion support in requirejs,因此您可以为每个项目设置一个上下文。这是来自文档页面的示例。这是你想要的吗?
var reqOne = require.config({
context: "version1",
baseUrl: "version1"
});
reqOne(["require", "alpha", "beta",],
function(require, alpha, beta) {
log("alpha version is: " + alpha.version); //prints 1
log("beta version is: " + beta.version); //prints 1
setTimeout(function() {
require(["omega"],
function(omega) {
log("version1 omega loaded with version: " +
omega.version); //prints 1
}
);
}, 100);
});
var reqTwo = require.config({
context: "version2",
baseUrl: "version2"
});
reqTwo(["require", "alpha", "beta"],
function(require, alpha, beta) {
log("alpha version is: " + alpha.version); //prints 2
log("beta version is: " + beta.version); //prints 2
setTimeout(function() {
require(["omega"],
function(omega) {
log("version2 omega loaded with version: " +
omega.version); //prints 2
}
);
}, 100);
});