我正在构建一个PowerShell模块。它包含一些公共函数和一些私有实用函数。我希望模块的用户只知道公共函数。
我创建了Project.psm1
。
. "${PSScriptRoot}\public\Foo.ps1"
Export-ModuleMember -Function Foo
因为我打算将模块发布到PowerShell库,所以我还需要一个清单文件。我已经创建了一个脚本,它将为项目生成清单。
New-ModuleManifest `
-Guid 'd1f545c4-49db-4fd8-bc14-53df36387757' `
-Path path\to\project `
-RootModule "Project.psm1" `
-FunctionsToExport 'Foo'
我不喜欢在两个地方指定Foo
,如果我重命名或删除Foo
,或者添加一个新的导出函数,我将不得不更改两个文件,最终,我会忘记其中一个。
有没有办法在一个地方指定所有要导出的函数?
1条答案
按热度按时间qacovj5a1#
.psd1
文件)中显式指定的导出 * 还会约束 * 脚本模块(.psm1
文件)的 * 隐式或显式 * 导出。Export-ModuleMember
调用的情况下--脚本模块导出 * 所有 * 它的(a)函数和(b)别名,但 * 不导出 * 它的变量。假设最好避免从模块中导出 * 变量 *,[1]通常没有理由在脚本模块文件中使用
Export-ModuleMember
。因此,只需要在模块清单的
FunctionsToExport
(AliasesToExport
)条目中维护控制模块导出哪些函数(和别名)。[1]导出变量不仅会增加名称冲突的风险,还会带来一个“可发现性”问题;通常,用户期望模块仅导出 * 命令 *,可以使用
Get-Command
发现这些命令,并且可以使用Get-Help
/-?
请求这些命令的帮助。