Module Structure Challenges
A brief note on module structure. During development I like to create a separate PS1 for every class and resource. I feel that this structure is the cleanest and easiest to manage in source. Here is a snippet of the FileWatcher modules layout.
C:. │ .gitignore │ FileWatcher.build.ps1 │ FileWatcher.psd1 │ FileWatcher.psm1 │ ├───.vscode │ settings.json │ ├───Classes │ BaseFileWatcher.ps1 │ ├───DSCResources │ ProcessFileWatcher.ps1 │ ServiceFileWatcher.ps1 │ WebsiteFileWatcher.ps1 ...
This does create some challenges. The biggest is that PowerShell throws a parse error when a class is defined in a script that references an external type. The PowerShell team is tracking the issue here.
To work around this, I have an Invoke-Build script that compiles the files into a completed PS1 and then runs the Pester tests.