Javascript RequireJS:Module';X';具有与输出路径相同的源路径
我正在使用grunt构建我的资产,我的Javascript RequireJS:Module';X';具有与输出路径相同的源路径,javascript,configuration,requirejs,Javascript,Configuration,Requirejs,我正在使用grunt构建我的资产,我的Gruntfile.js配置如下: requirejs: { build: { options: { almond: true, appDir: '.tmp', findNestedDependencies: true, mainConfigFile: '.tmp/scripts/config.js', modules: [ { name: 'mod' },
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.] }
看起来,您只有一个要优化的模块-您不应该使用模块。试试这个:
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
}
}
},
这应该行得通。我希望,我很了解你的配置。如果没有-请告诉我。这似乎是一个错误,设置buildPath和sourcePath会导致引发异常。你可以尝试使用早期版本的r.js来解决这个问题。我实际上也遇到过同样的问题,上一篇文章的作者是对的:这是一个与在构建过程中重写源文件相关的r.js问题 如我所见,他们添加了一个配置选项
allowSourceOverwrites
来修复它:
将其设置为
true
对我有帮助,希望能帮助其他人。事实上,我正在创建多个模块。我只是将它们从配置中删除,以简化上面的示例。我尝试了您建议的方法,并且效果良好。但只构建一个模块。我想我可以进行多个配置,在我的配置中,每个模块使用并发配置。谢谢@IvanTorres我认为,您的示例中的主要问题是appDir
字段。可能您不需要指定它-您仍然需要指定mainConfigFile。relativeUrl
是实际选项吗?我在文档或源文件中找不到对它的任何引用。