【问题标题】:requirejs optimizer just define module name onlyrequirejs 优化器只定义模块名称
【发布时间】:2015-07-21 18:17:49
【问题描述】:

我想使用 requirejs 优化器来为我的 js 文件创建/定义模块名称。

例如:如果我在 modules/moduleA 下有一个文件说 test.js

modules
|
|
-----moduleA
     |
     -----test.js

我希望 requirejs 优化器仅根据路径为我创建模块名称...例如,下面我希望 requirejs 优化器创建模块名称 modules/moduleA/test 并放入 test.js 中的定义中

例如: 在运行 requireJS 优化器之前

test.js 内容:

define( ["my/cart", "my/inventory"],
            function(cart, inventory) {
               ...
           }
        );

运行requirejs优化器后

test.js 内容

define("modules/moduleA/test",
            ["my/cart", "my/inventory"],
            function(cart, inventory) {
               ...
           }
        );

稍后我将通过 grunt 来处理相关的依赖文件的组合...但我希望 requirejs 优化器访问每个文件并根据它提供的路径给我模块名称。

这可行吗?

【问题讨论】:

    标签: javascript requirejs requirejs-optimizer


    【解决方案1】:

    Requirejs 的作者 James Burke 通过另一个论坛提供了 answer to this。

    我们可以通过使用 RequireJS 的转换轻松地做到这一点:

    var requirejs = require('requirejs');
    requirejs.tools.useLib(function(require) {
      require(['transform'], function (transform) {
         //todo: generate a files array with the list of files to concatenate.
    
          files.forEach(function(filePath) {
            var fullPath = path.join(targetDir, filePath);
            var contents = fs.readFileSync(fullPath, 'utf8');
            var moduleId = /* todo, figure out what the moduleId is for the module */
            var transformed = transform
                              .toTransport('', moduleId, fullPath, contents);
    
            //todo: concat the contents together
          });
        });
      });
    });
    

    【讨论】:

    • 感谢@Louis 的编辑。它现在看起来很完美。感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-02
    • 1970-01-01
    • 2016-12-24
    • 1970-01-01
    • 2017-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多