1

ソースから Twitter ブートストラップを作成し、ファイルを node.js アプリの /lib ファイルに移動するカスタム シェル スクリプトがあります。

rm -r bootstrap
make bootstrap
mv -f bootstrap/css/* ../../lib/public/css
mv -f bootstrap/img/* ../../lib/public/img
mv -f bootstrap/js/* ../../lib/public/js

これをシェルから実行すると、./make_bootstrap.sh を使用して問題なく動作します。

これで、完全なアプリ (主に coffeescript のコンパイルと簡単なテストの初期化) 用の Makefile を作成し、このカスタム シェル スクリプトを実行してブートストラップを構築するコマンドが必要になりました。ここに私のメイクファイルがあります

REPORTER = spec

all: build

build:
    @./node_modules/coffee-script/bin/coffee \
        -c \
        -o lib src

bootstrap:
    @./src/bootstrap \
        ./make_bootstrap.sh

clean:
    rm -rf lib
    mkdir lib

watch:
    @./node_modules/coffee-script/bin/coffee \
        -o lib \
        -cw src

test:
    @./node_modules/mocha/bin/mocha \
        --reporter $(REPORTER) \
        test/*.coffee

.PHONY: build bootstrap clean watch test

関連するコマンドは「make bootstrap」です。ただし、コマンド ラインから make bootstrap を実行すると、次のエラーが表示されます。

make: ./src/bootstrap: Permission denied
make: *** [bootstrap] Error 1

当初はパーミッション エラーだと思っていましたが、ファイルにすべてのパーミッションを設定しても (chmod 777)、何も起こりません。この時点で完全なアクセス許可を与えたファイルには、ルート Makefile、ブートストラップ フォルダー内のカスタム シェル スクリプト、およびブートストラップ フォルダー自体内の Makefile が含まれます。

4

1 に答える 1

3

編集:

コメントに基づいて、これにリファクタリングしました

bootstrap:
    rm -r src/bootstrap/bootstrap
    $(MAKE) -C ./src/bootstrap bootstrap
    mv -f src/bootstrap/bootstrap/css/* lib/public/css
    mv -f src/bootstrap/bootstrap/img/* lib/public/img
    mv -f src/bootstrap/bootstrap/js/* lib/public/js

これは、以前のシェル スクリプトの機能 (カスタム プロジェクトのファイルの移動) を複製し、Twitter Bootstrap に同梱されている標準の makefile を引き続き使用します。はるかにクリーン...人々が進化とリファクタリングを確認できるように、元の回答を以下に示します。

古い答え

わかりました、私を正しい方向に向けてくれたコメントに感謝します。このソリューションは機能します:

bootstrap:
    cd ./src/bootstrap; \
        ./make_bootstrap.sh

何が起こるかというと、ディレクトリの変更が実行され (サブプロセスで実行されるため、make を実行する場所には影響しません)、カスタム スクリプトが実行されます。「汚い」と感じるので、メイクファイルでこのようなものを使用するべきではないようです。おそらく、それを行うためのよりクリーンな方法は、LESS コンパイラを自分で呼び出して、ブートストラップによって提供される makefile を模倣することです。私はこれを小さな個人的なプロジェクトに使用していますが、それでうまくいきます。

于 2012-09-06T02:07:48.857 に答える