1

我正在使用 angular2-image-gallery https://github.com/BenjaminBrandmeier/angular2-image-gallery

它导致我在生产(也在本地)中出现关于从 angular 导入两次 BrosweModule 的错误。在我的本地构建中,我已按照错误消息中的建议将主要组件 BrowseModule 导入更改为 CommonModule,并且它运行良好。

但是,将它上传到 netlify 时,我无法让它在生产中工作。

我尝试过:强制 git add node_modules/angular2-image-gallery 文件夹并将其从 package.json 中删除,因此 netlify 不会安装它并使用我修改过的那个。

git push 后部署成功,但出现同样的错误。如何?我意识到它使用的是旧的依赖项,所以错误保持不变。

因此,我创建了另一个网站并开始使用相同的存储库进行部署,但构建失败。实际上,它会编译所有内容,并且一旦编译它就会出现以下错误:

/opt/build/repo/src/app/gallery/gallery.module.ts (8,42) 中的错误:找不到模块“angular2-image-gallery”。

没有发现很多与此模块相关的错误。但它在 node_modules 文件夹中。我应该怎么办?

先谢谢了。

4

1 回答 1

3

注意:我为 Netlify 工作。

本文描述了我们的构建过程。

您看到的行为表明,npm install如果我们找到 a ,我们会自动运行package.json,但您可能缺少的是我们在构建开始之前运行它,并且我们只会重新运行它(而不是使用输出的缓存副本最后一次运行的)如果文件上的校验和发生变化。

一些需要做一些挑剔的安装技巧的人使用了类似npm install package-name -g ; npm build构建命令的东西,但我认为这不会帮助你安装修改过的包,除非你在 npm 上重新发布了它。

我认为这不是正确的解决方案 - 我认为修复双重导入是一个更好的解决方案,但我对此没有任何建议 - 但这是我们将包从您的存储库添加到正确位置的最佳方法,所以它作品。请注意,您将负责确保该包的所有依赖项在您的 package.json 中明确列出,以便为您安装它们。就像我说的那样,这不是正确的方法(正确的方法是让您修复导入,然后我们自动从 package.json 安装依赖项,而无需维护列表),但这是一种方法。

为此,您可以尝试将模块复制到我们的节点目录中,而不是使用您自己的。我们将节点依赖项存储在 /opt/cache/build/node_modules 中,而不是典型的 ./node_modules 中。

您首先要将此修改后的副本检查到您的存储库中(听起来好像已经存在),然后将其复制到该目录中,确保将任何辅助链接/片段放在 .../bin 和该目录中的类似目录中node_modules 树以及包本身在其 node_modules/X 目录中。我可能会在以下构建命令中执行此操作:

cp -R node_modules/X /opt/build/cache/node_modules && 
cp node_modules/bin/X /opt/build/cache/node_modules/bin && 
npm build
于 2017-03-27T18:25:25.803 回答