RequireJS:模块“X”的源路径与输出路径相同

时间:2014-01-17 14:43:17

标签: javascript configuration requirejs

我正在使用grunt来构建我的资产,我的Gruntfile.js配置内容如下:

requirejs: {
  build: {
    options: {
      almond: true,
      appDir: '.tmp',
      findNestedDependencies: true,
      mainConfigFile: '.tmp/scripts/config.js',
      modules: [
        { name: 'mod' },
      ],
      dir: 'public',
      optimize: 'uglify',
      optimizeCss: 'standard',
      preserveLicenseComments: false,
      relativeUrl: './',
      skipDirOptimize: true,
      useStrict: true
    }
  }
},

从技术上讲,配置告诉RequireJS在public/scripts/mod.js中构建模块.tmp/scripts/mod.js

为什么RequireJS坚持路径与输出相同?

Running "requirejs:build" (requirejs) task
{ [Error: Error: Module ID 'mod' has a source path that is same as output path: /Users/ivan/project/.tmp/scripts/mod.js. Stopping, config is malformed.
    at /Users/ivan/project/node_modules/requirejs/bin/r.js:25834:39
]
  originalError: [Error: Module ID 'mod' has a source path that is same as output path: /Users/ivan/project/.tmp/scripts/mod.js. Stopping, config is malformed.] }

3 个答案:

答案 0 :(得分:1)

这似乎是problem caused by an r.js commit本身,因此设置构建路径和源路径会导致引发异常。您可以尝试使用早期版本的r.js来解决问题。

答案 1 :(得分:1)

我实际上遇到了同样的问题,前一篇文章的作者是对的:这是一个与在构建过程中覆盖源文件有关的r.js问题。

正如我所见,他们添加了一个配置选项allowSourceOverwrites来修复它: r.js config example

将它设置为true帮助了我,希望能帮助其他人。

答案 2 :(得分:-1)

看来,您有单个模块进行优化 - 您不应该使用模块。试试这个:

requirejs: {
  build: {
    options: {
      almond: true,
      findNestedDependencies: true,
      mainConfigFile: '.tmp/scripts/config.js',
      name : 'mod'
      out: 'public/result.js',
      optimize: 'uglify',
      optimizeCss: 'standard',
      preserveLicenseComments: false,
      relativeUrl: './',
      skipDirOptimize: true,
      useStrict: true
    }
  }
},

这应该有效。我希望,我理解你的配置。如果没有 - 请告诉我。