我们正在尝试构建一个具有gulp功能的c#应用程序,以便对前端网站进行捆绑/缩小。
由于gulp依赖性,我们当前正在使用节点6。将来的分支将更新到节点10,但是在迁移项目时需要不同的节点依赖性。我认为使用docker容器进行构建可能有助于减轻本地计算机上节点版本之间的切换。
所以我创建了一个docker镜像
FROM microsoft/dotnet-framework:4.7.2-sdk
然后我将npm加载到它的顶部。将卷绑定到我的源目录中,我能够安装npm软件包,安装nuget软件包并调用build,但是由于缺少我的gulp步骤,它将失败。
我已经在容器中全局安装了gulp,并在node_modules文件夹中局部安装了gulp。我最终遇到了类似的错误,
C:\Program Files\node\node-v6.16.0-win-x64\node_modules\gulp\node_modules\sver-compat\sver.js:19
var semver = version.match(semverRegEx);
^
TypeError: Cannot read property 'match' of undefined
at new Semver (C:\Program Files\node\node-v6.16.0-win-x64\node_modules\gulp\node_modules\sver-compat\sver.js:19:23)
at Function.match (C:\Program Files\node\node-v6.16.0-win-x64\node_modules\gulp\node_modules\sver-compat\sver.js:374:15)
我在网上搜索了好几天,没有运气能找到任何可以帮助我解决这里问题的东西。有没有人能够使gulp在Windows Server Core docker容器内成功运行?挂载目录有问题吗?如果这很重要,请使用适用于Windows的Docker。
答案 0 :(得分:0)
在Windows-Server-Core上,我可以推测最好的是docker,volume-mounts和npm / gulp系统链接存在问题。
我相信默认情况下在容器上设置的用户希望使用c:\ containermappeddirectories文件夹。我现在不确定是否可以配置。
但是我在Powershell中的工作看起来像是在容器中运行的
npm install -g gulp@^3.9.1
md c:\ContainerMappedDirectories
cd c:\containermappedDirectories
robocopy /S "c:\MyUISource" C:\ContainerMappedDirectories
npm install #installs gulp locally to this folder
gulp prod-build
robocopy /S C:\ContainerMappedDirectories\dist c:\MyUISource
因此,我在全球范围内安装了gulp,我创建了本地工作区,将我的源代码复制到其中并运行npm / gulp,然后将我的输出复制回安装位置。
最后,这是我可以完成的最佳工作。