Одной из возможностей является использование параметра командной строки.
Да, для этого вам потребуется настроить скрипт serve
в пакет. json как это:
"scripts": {
"serve": "vue-cli-service serve --port"
}
Затем через инструмент CLI запустите:
npm run serve -- <port_number>
Примечание: <port_number>
аргумент должен быть заменен реальным номером порта, например 8080
, 3000
et c ...
... Я был бы признателен «проще», где я могу сохранить порт в файле конфигурации ...
Файл конфигурации:
Допустим, у нас есть файл с произвольным именем .portnumber
, который сохраняется в root каталога проекта. Например:
.
├── .gitignore
├── .portnumber <------
├── node_modules
│ └── ...
├── package.json
└── ...
, а содержимое файла .portnumber
содержит только номер порта, который будет использоваться. Например:
3000
Решение A: * Только для платформ Nix (Linux / MacOS ...)
При запуске сценариев npm в * nix платформы, используемая по умолчанию npm оболочка sh
. Поэтому будет работать следующее.
package. json
"scripts": {
"serve": "vue-cli-service serve --port \"$(<.portnumber)\""
}
Часть $(<.portnumber)
, приведенная выше, по существу считывает содержимое файла .portnumber
, ( это то, что делает часть <.portnumber
), и использует Подстановка команды .
Так, учитывая, что файл .portnumber
содержит 3000
команда, выполняемая в сценарии npm эффективно:
vue-cli-service serve --port 3000
Вы также можете сделать это:
пакет. json
"scripts": {
"serve-with-default": "port=$(<.portnumber); vue-cli-service serve --port \"${port:-8080}\""
}
Это очень похоже на предыдущий однако если файл .portnumber
не существует или является пустым, по умолчанию для номера порта будет использоваться 8080
.
Решение B: Кроссплатформенное (Windows / Linux / macOS .. .)
Для кроссплатформенного решения (т. Е. Успешно работающего на Windows, Linux и macOS ...) вам потребуется использовать nodejs для выполнения ваших требований. Есть несколько различных подходов к этому, как описано в следующих двух подразделах:
- Использование внешнего nodejs (. js) файла
- Встраивание ваш JavaScript в пакете. json.
Использование внешнего nodejs (. js) файла
Создайте файл с именем serve.js
serve. js
const readFileSync = require('fs').readFileSync;
const execSync = require('child_process').execSync;
const port = readFileSync('.portnumber', {encoding: 'utf8'});
execSync('vue-cli-service serve --port ' + port, {stdio: 'inherit'})
.. и также сохраните его в каталоге вашего проекта:
.
├── .gitignore
├── .portnumber <------
├── node_modules
│ └── ...
├── package.json
├── serve.js <------
└── ...
Переопределите ваш serve
npm скрипт выглядит следующим образом:
пакет. json
"scripts": {
"serve": "node serve"
}
Объяснение:
Файл serve.js
по существу выполняет следующие действия:
Использует встроенный node.js readFileSync
для чтения содержимого файла .portnumber
и присваивает номер переменной port
.
Затем использует встроенный node.js execSync
для запуска команды vue-cli-service serve --port
с портом номер, ранее считанный из файла .portnumber
.
In выровняв свой JavaScript в пакете. json.
Кроме того, вы можете вместо этого встроить свой код nodejs / JavaScript в раздел скриптов вашего пакета. json. В этом случае переопределите ваш скрипт npm следующим образом:
package. json
"scripts": {
"serve" : "node -e \"require('child_process').execSync('vue-cli-service serve --port ' + require('fs').readFileSync('.portnumber', {encoding: 'utf8'}), {stdio: 'inherit'})\""
}
Объяснение:
- Это фактически то же самое (хотя и рефакторированное), что и вышеупомянутое решение, в котором использовался отдельный файл
.js
, однако использование отдельного сценария / файла nodejs теперь избыточно. - Параметр командной строки nodejs
-e
используется для оценки встроенного JavaScript.