2

Windows で (TypeScript コンパイラ)を使用するプロジェクトをビルドしようとしてtscいますが、SCons がコンパイラを呼び出すと、間違ったディレクトリで呼び出されるようです。その上、それが生成するコマンドは、私の最善の努力にもかかわらず、絶対パスではなく相対パスを使用し、失敗します。以下はそれを行うコードです:

import os

sdk_sources = [] # some *.ts files

deployments_settings = [] # some more files

def prefix_file(file):
    return os.path.join(Dir('.').abspath, 'src', str(file))

def modify_targets(target, source, env):
    for x in source:
        print "source: %s" % str(x)
    return target, source

Tsc = Builder(
    action = 'tsc --target ES5 --out $TARGETS $SOURCES',
    suffix = '.js', src_suffix = '.ts', emitter = modify_targets)
env = Environment(BUILDERS = { 'Tsc' : Tsc },
                  BUILD_ROOT = Dir('.'),
                  ENV = { 'PATH' : os.environ['PATH'] })
env.Tsc(target = 'deploy/test', source = map(prefix_file, sdk_sources))

実行後は次のようになります。

tsc --target ES5 --out deploy\test.js src\***.ts src\***.ts 
Error reading file "C:\Program Files (x86)\Microsoft SDKs\TypeScript\lib.d.ts": File not found
Error reading file "src\***.ts": File not found
*** repeated many times ***
scons: *** [deploy\test.js] Error 1
scons: building terminated because of errors.

PS。SCons ビルドが開始される同じディレクトリから生成されたコマンドを実行すると、ビルドは成功します。

編集:

より詳しい情報

from subprocess import call

def name_of(file): return file.abspath

def tsc(source, target, env):
    call(['tsc', '--target', 'ES5', '--out', target[0].abspath] +
         map(name_of, source))

Tsc = Builder(action = tsc)

このビルダーは期待どおりに機能します。

4

1 に答える 1