没有来自netlify部署的node_modules

时间:2019-02-05 03:47:25

标签: npm-install netlify

我已经使用Netlify和git repo进行了持续的部署设置,但是到目前为止,无论我做什么,Netlify都不会npm-install进行任何操作。当我下载部署的zip时,没有node_modules文件夹,我的站点无法访问node_modules,只是不存在。我从一个随机的npm软件包(破折号)开始尝试安装它,但到目前为止我什么都没有。

Netlify说它会自动运行npm install。我尝试了没有构建命令,并且尝试将npm install添加为构建命令,但都没有结果。

package.json:

{
  "name": "netlify-test",
  "version": "1.0.0",
  "description": "stuff",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/electrovir/netlify-test.git"
  },
  "author": "electrovir",
  "license": "MIT",
  "bugs": {
    "url": "https://github.com/electrovir/netlify-test/issues"
  },
  "homepage": "https://github.com/electrovir/netlify-test#readme",
  "dependencies": {
    "lodash": "^4.17.11"
  }
}

HTML:

<!doctype html>
<html>

<head>
    <title>
        hi
    </title>
    <script src="node_modules/lodash/_apply.js"></script>
</head>

<body>
    Why can't this find node_modules??
</body>

</html>

2 个答案:

答案 0 :(得分:2)

花了好一会儿才知道,但是我发现当您拥有{{1时,Netlify确实将 npm install放入您的存储库根目录或基本目录中}}。可以通过将 Build命令更改为类似package.json并读取部署控制台输出(其中将列出ls文件夹)来看到这一点。

但是,在运行 Build命令之后且在部署之前的某个时刻,此node_modules被删除。因此,如果您使用与以下类似的内容作为 Build命令,则node_modules可以复制到您的发布目录

node_modules

这会将基本目录的内容复制到rm -rf dist && mkdir dist && rsync -rv * dist --exclude ./dist 中,我将其设置为我的 Publish目录,而忽略了dist本身(它可以被复制到自身中)。最好将它作为npm脚本添加到./dist中的package.json中,作为您的 Build命令

请注意,基本目录构建命令发布目录都在部署>部署设置下,或者在Netlify中设置>构建和部署

感谢lastmjs协助您解决此问题。

答案 1 :(得分:0)

如果node_modules在那里,那会很奇怪。如果且仅当存储库根目录中有package.json时(如果在netlify.toml中设置了package.json,否则Netlify的连续部署确实会为您运行npm install。但是,它还使用了部署目录之外的自定义npm目录(请参阅此处的设置:https://github.com/netlify/build-image/blob/master/run-build-functions.sh#L34),因为static site不需要部署base浏览时间-仅在构建时。

Netlify部署的预期路径为:

  1. 您已将依赖项管理器配置签入到仓库的根目录的git仓库(如果在UI或toml文件中未设置node_modules目录),或者在base目录中组。如this article about the build settings at Netlify
  2. 所述,这可以是baseGemfile.lockpackage.jsonyarn.lock中的任何一个/全部。
  3. 您没有将requirements.txt存储在仓库中。其中许多将特定于构建环境的体系结构-本地计算机几乎肯定与Netlify的计算机不同。您将需要在构建时生成这些文件。
  4. 您的构建旨在在构建期间使用那些模块。因此,例如,您在构建时使用dotenv来读取node_modules文件,或者使用gulp-cli处理.env
  5. 您的构建已完成,并且在构建过程中使用了所有模块来生成独立的html / js / css / images,因此您已完成它们-静态html和其他资源在发布目录中生成,其中构建过程有意放置节点模块,因此未部署它们。您的静态网站在运行时不需要模块,因此在其中部署文件的成千上万是没有效率的。

您可能遇到的情况需要其中一些/其中一个-例如function,或者甚至在您的静态站点上也可能需要其中一个文件-可以,可以将其明确地复制到发布目录中。但这不是常态:)