Npm: запускать скрипты из package.json из любой папки внутри проекта

Я использую раздел scripts внутри файла package.json для хранения некоторых команд, которые я должен запускать регулярно.

 "scripts": {
    "test": "./test/phantomjs ./test/js/run_jasmine_test.coffee ./test/index.html",
    "rjs": "r.js -o ./js/app.build.js",
    "less": "lessc -x ./css/app.less > ./css/app.css"
  }

в каждой команде у меня есть ./ в начале пути - вот почему я могу вызвать только npm run-script rjs из корневого каталога проекта. есть ли способ ссылаться на корневой каталог проекта внутри package.json, чтобы я мог запускать, например. npm test из любого места в моем проекте?

Ответ 1

Я думаю, это зависит от того, как вы организуете свой проект.

Я создал образец проекта только для демонстрации. Это мое примерное дерево каталогов проектов:

.
├── dir1
│   └── dir2
├── package.json
├── src
│   └── index.js
└── test
    └── test.js

ПРИМЕЧАНИЕ. ./dir1/dir2 - это всего лишь два пустых каталога для демонстрации.

Мой package.json файл выглядит следующим образом:

{
  "name": "sample",
  "version": "1.0.0",
  "description": "sample",
  "main": "index.js",
  "scripts": {
    "test": "node test/test.js",
    "start": "node src/index.js"
  },
  "author": "yaniv",
  "license": "ISC"
}

Сосредоточьтесь на разделе сценариев, это две простые строки, без соображений относительно моего местоположения.

Если я сменил каталог на /dir1/dir2 и выполнил npm test, а script, я написал в test, свойство выполнено правильно, не используя ./ (который определяет текущий каталог...)

Нижняя строка. Я предполагаю, что если вы повторно организуете свой проект и удалите ./, то выполнит эту работу в вашем случае.

Ответ 2

рассмотрел создание файла оболочки, который работает?

например, создать файл .sh, сделать его исполняемым (chmod 777 file.sh)

а затем cd к корню проекта nodejs, запустите команду npm, а затем cd вернитесь в только что оставшийся каталог?

добавление script в вашу среду сделает его исполняемым из любого места...

альтернативно будет жестко кодировать полный путь в порядке? (так что вместо использования. /- put/home/user/username/yourproject/phantomjs)

Ответ 3

Я нашел лучший вариант - создать js script вместо оболочки script. Мне кажется, что мне легче общаться с npm из моего опыта. вы можете проверить, в какой среде вы находитесь, перед запуском команд. У нас есть люди с обоими окнами, маками и ubuntu, а также проверка среды или использование пакета fs облегчают жизнь.