Как опубликовать модуль Powershell в Linux?
Курс я получил
PS /data/projects/lesspass-powershell> Publish-Module -Name "Lesspass" -Repository PSGallery -NuGetApiKey xxxxxxxxxxxxxxxxxxxx
Publish-Module : The specified module 'Lesspass' was not published because no module with that name was found in any module directory.
At line:1 char:1
+ Publish-Module -Name "Lesspass" -Repository PSGallery -NuGetApiKey oy ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (Lesspass:String) [Publish-Module], ArgumentException
+ FullyQualifiedErrorId : ModuleNotAvailableLocallyToPublish,Publish-Module
Макет проекта
Мой проект в $HOME/projects/lesspass-powershell
❯ tree
.
├── Lesspass-Clipboard.psm1
├── Lesspass-Clipboard.tests.ps1
├── Lesspass-Password.psm1
├── Lesspass-Password.tests.ps1
├── Lesspass-Profile.psm1
├── Lesspass-Profile.tests.ps1
├── Lesspass.psd1
├── Lesspass.psm1
├── Lesspass.tests.ps1
├── Lesspass-Validator.psm1
├── Lesspass-Validator.tests.ps1
├── LICENSE
├── makefile
├── PBKDF2_HMAC.cs
└── README.md
Вопрос
Как опубликовать модуль из моего текущего рабочего каталога?
2 ответа
- Я переименовал каталог моего проекта в
Lesspass
так как он должен совпадать с модулем, который вы хотите опубликовать Добавить каталог моего проекта в
$Env:PSModulePath
$Env:PSModulePath = $Env:PSModulePath + ":$HOME/projects/lesspass-powershell"
Тогда опубликуйте
Publish-Module ` -Name "Lesspass" ` -Repository "PSGallery" ` -NuGetApiKey $Env:PSGALLERY_API_KEY `
По выбору
Переименовать файл для удаления Lesspass-
префикс, для ясности
❯ tree
.
├── Clipboard.psm1
├── Clipboard.tests.ps1
├── Lesspass.psd1
├── Lesspass.psm1
├── Lesspass.tests.ps1
├── LICENSE
├── makefile
├── Password.psm1
├── Password.tests.ps1
├── PBKDF2_HMAC.cs
├── Profile.psm1
├── Profile.tests.ps1
├── README.md
├── tools
│ └── publish-module.ps1
├── Validator.psm1
└── Validator.tests.ps1
Вы можете публиковать из любого каталога, который захотите. PSD1 будет определять имя модуля. Если вы разрабатываете вне каталога вашего модуля, а это должно быть так, укажитеPath
вместоName
:
$publish = @{
Path = "$HOME/projects/lesspass-powershell"
Repository = 'PSGallery'
NuGetApiKey = $env:PSGALLERY_API_KEY
}
Publish-Module @publish