6

Facebook の JavaScript 用パッケージ マネージャであるrunが提供するコマンドを使用できません。yarn

現在、私のpackage.jsonファイルには、scriptsオブジェクト用に次のものがあります。

"scripts": {
  "lint": "./node_modules/.bin/eslint --ignore-pattern dist ."
}

次のコマンドを実行すると、期待どおりに動作しnpm run lintます。ただし、スクリプトをyarnwithから実行するとyarn run lint、次のエラーが表示されます。

Petesta :: λ -> ~/Git/yarn yarn run lint
yarn run v0.15.1
$ "./node_modules/.bin/eslint --ignore-pattern dist ."
sh: ./node_modules/.bin/eslint --ignore-pattern dist .: No such file or directory
error Command failed with exit code 127.
info Visit http://yarnpkg.com/en/docs/cli/run for documentation about this command.

./node_modules/.binディレクトリは私のものであり、または$PATHのような実行可能ファイルがあれば、期待どおりに機能することに気付きました。datepwdyarn run some_script_on_date

これを機能させる 1 つの方法は、実行しようとしているコマンドを含む別のシェル ファイルを作成することです。と呼びましょう./scripts/lint.sh

#!/bin/bash

./node_modules/.bin/eslint --ignore-pattern dist .

そして、ファイルに対してこのコマンドを実行しますchmod +x ./scripts/lint.sh

scriptsオブジェクトに次の行を追加します。

"new_lint": "./scripts/lint.sh"

そして今yarn run new_lint、期待どおりに実行されます。

何か不足していますか、それともスクリプトを呼び出すyarn必要があるのですか? のようにコマンドを実行したいと思いnpmます。

4

1 に答える 1

3

関連すると思われる問題を見つけました: https://github.com/yarnpkg/yarn/pull/809

yarn は npm スクリプトのスペースを認識しませんでした。これは次のリリースで修正されると思います。コンピューターで問題を再現できます (最新の糸: 0.15.1 を使用)。

ちなみに、./node_modules/.binnpm スクリプトに含める必要はありません。ここで説明されているように、npm と yarn の両方がデフォルトでそのフォルダー内を検索します: https://docs.npmjs.com/cli/run-script

したがって、スクリプトは次のようになります。"lint": "eslint --ignore-pattern dist ."

于 2016-10-14T19:01:59.060 に答える