質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
npm

npmは、Node Packaged Modulesの略。Node.jsのライブラリ・パッケージを管理できるツールです。様々なモジュールを簡単にインストールでき、自分でモジュールを作成し公開する際にも使用できます。

Q&A

解決済

3回答

905閲覧

npm scripts: 複数ファイルを一気に作成する

dwayne_johnson

総合スコア86

npm

npmは、Node Packaged Modulesの略。Node.jsのライブラリ・パッケージを管理できるツールです。様々なモジュールを簡単にインストールでき、自分でモジュールを作成し公開する際にも使用できます。

0グッド

0クリップ

投稿2018/12/04 00:04

npm scriptsを使って複数ファイルを一気に作成するコマンドを追加したいのですが、上手くいきません。

package.json

1"scripts": { 2 "ducks": "mkdir src/states/ducks/$FOLDER && touch src/states/ducks/$FOLDER/{actions.ts,epics.ts,index.ts,operations.ts,reducers.ts,selectors.ts}" 3 },

このように設定し、$ FOLDER=new yarn ducksを実行すると、「src/states/ducks/new」フォルダ以下に指定したファイル(つまり6つのtsファイル)ができる想定でした。

しかし、実行してみたところ、「src/states/ducks/new」フォルダ以下に「{actions.ts,epics.ts,index.ts,operations.ts,reducers.ts,selectors」という名前のフォルダができてしまいました。

ターミナルから直接的に、touch src/states/ducks/new/{actions.ts,epics.ts,index.ts,operations.ts,reducers.ts,selectors.ts}を実行すると、正しくファイルを作成できることは確認しています。

どうにかしてnpm scriptsから実行したいのですが、1つづつファイルを作成し&&で繋げていく以外に、簡潔に書ける解決策は考えられますでしょうか?
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

中括弧で囲む複数ディレクトリ名の指定方法は、OSや npm の標準機能ではなく、bash などの特定のシェルプログラム固有の機能です。
なので、下記のようにすると動くのでは。

"scripts": { "ducks": "bash -c 'mkdir src/states/ducks/$FOLDER && touch src/states/ducks/$FOLDER/{actions.ts,epics.ts,index.ts,operations.ts,reducers.ts,selectors.ts}'" },

ご参考になれば。

投稿2018/12/04 01:29

tkanda

総合スコア2425

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dwayne_johnson

2018/12/04 13:50

ありがとうございました。勉強になりました。
guest

0

JSON

1"scripts": { 2 "ducks": "bash -c 'mkdir src/states/ducks/$FOLDER && touch src/states/ducks/$FOLDER/{actions.ts,epics.ts,index.ts,operations.ts,reducers.ts,selectors.ts}'" 3 },

ブレース展開はBashの機能ですので、Bashにスクリプトを実行させれば良いかと思います。

投稿2018/12/04 01:15

kazto

総合スコア7196

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dwayne_johnson

2018/12/04 13:50

ありがとうございました。勉強になりました。
guest

0

ベストアンサー

ターミナル(シェル)でうまく動くのは、 bash 等のシェルの機能であるブレース展開が動くからですね。

とりあえず、思いついたのは、bash を経由させることですが、下記のように bash を経由させたら、動作したりしないでしょうか?

"scripts": { "ducks": "bash -c 'mkdir src/states/ducks/$FOLDER && touch src/states/ducks/$FOLDER/{actions.ts,epics.ts,index.ts,operations.ts,reducers.ts,selectors.ts}'" },

投稿2018/12/04 01:14

編集2018/12/04 01:16
CHERRY

総合スコア25171

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dwayne_johnson

2018/12/04 13:49

シェルとbashについて、違いを認識できておらず、勉強になりました。ありがとうございました。助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問