出于持续集成的原因,我正在尝试让SCons对一系列JavaScript文件调用uglify。。。
然而,即使“duplicate=False”标志传递给了“env”。SConscript'调用;以防止scons将源复制到构建输出文件夹。它将具有相同源和目标扩展名的文件标记为依赖循环。例如,以下简化的项目结构:
SConstruct
applications/SConscript
applications/frontend/SConscript
applications/frontend/scripts/app.js
-- SContruct --
UglifyBuilder = env.Builder(
action = 'uglify --source $SOURCE --output $TARGET',
suffix = '.js',
single_source = True)
env['BUILDERS']['Uglify'] = UglifyBuilder
env.SConscript('applictions/SConscript', 'env',
variant_dir=os.path.join('build', 'debug', 'applications'),
duplicate=False)
-- applications/SConscript --
env.SConscript('frontend/SConscript', 'env', duplicate=False)
-- applications/frontend/SConscript --
env.Uglify('scripts/app.js')
当您在此(干净或不干净)上运行SCons时,将生成以下输出:;说明目标文件之间存在依赖关系循环:
$ scons applications/frontend/
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
scons: building associated VariantDir targets: build/debug/applications/frontend
scons: `applications/frontend' is up to date.
scons: done building targets.
scons: *** Found dependency cycle(s):
build/debug/applications/frontend/scripts/app.js -> build/debug/applications/frontend/scripts/app.js
我还试图传递源文件的绝对路径,但不幸的是,结果相同。当然,我可以将输出后缀更改为“.min.js”,但在其他情况下,输出文件的前导路径/文件名与任意输入源相同。
我是不是误解了这里的SCons?或者有人能给我指出解决这个问题的正确方向吗?
因为如果这是“这不是一个bug,这是一个特性”的情况之一,我会把头发拔出来
谢谢