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);
});