从netlify部署没有node_modules

问题描述 投票:2回答:2

我已经得到了持续部署的设置与Netlify和混帐回购协议,但到目前为止,无论我做什么,Netlify不npm-installing什么。当我下载了部署的拉链有没有node_modules文件夹,我的网站不能访问node_modules,它只是不存在。我已经开始与随机NPM包(lodash)设法得到它安装,但我已经没有什么至今。

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>
npm-install netlify
2个回答
2
投票

过了一段时间摸不着头脑,但我发现,Netlify确实npm install到您的回购根或基本目录,当你有一个package.json。这可以通过改变build命令类似ls和阅读部署控制台输出中看到(会有上市node_modules文件夹)。

然而,在运行生成命令之后,部署之前的一些点,这node_modules被删除。因此,如果你会使用类似以下内容的作为构建命令,node_modules可以复制到你的发布目录:

rm -rf dist && mkdir dist && rsync -rv * dist --exclude ./dist

此副本基本目录内容到dist,我已经设置为我的发布目录,而忽略./dist本身(它不能被复制到自身)。这将会是更好的,如果这是作为一个NPM脚本package.jsonnpm run <script name>添加为您生成命令。

需要注意的是基本目录,生成命令,并发布目录都在部署>部署设置或设置>构建与在Netlify部署。

由于lastmjs与搞清楚了这一点帮助。


0
投票

如果node_modules在那里这将是奇怪的。 Netlify的持续部署并运行NPM为您安装,当且仅当出现在你的仓库的根目录中的package.json(或代替在base目录,如果你设置一个的netlify.toml。然而,它也采用了自定义的NPM目录是部署目录之外(看看它是如何设置的位置:https://github.com/netlify/build-image/blob/master/run-build-functions.sh#L34),因为在部署node_modules应该没有必要在浏览时间static site - 仅在构建时。

对于Netlify部署意图路径是:

  1. 你有你的依赖管理器配置在回购的根签入您的git回购或base目录(如果没有base目录在UI或在toml文件中设置),如果设置。这可能是任何/所有Gemfile.lockpackage.jsonyarn.lock,或requirements.txt作为在this article about the build settings at Netlify解释
  2. 不要将您的node_modules存储在回购协议。其中很多人将是具体的编译环境的架构 - 和你的本地计算机几乎可以肯定比Netlify的不同。你会想在构建时生成的。
  3. 您的构建是为了使用这些模块在生成过程中。所以,你使用例如dotenv阅读您的文件.env同时建设,或者你使用gulp-cli处理您的Gulpfile.js
  4. 您的构建完成,你已经生成过程中所使用的所有模块,以生成独立的HTML / JS / CSS /图像,让你与他们做了 - 你的静态HTML和其他资产在发布目录中,其中在生成过程中产生故意不把你的节点模块,因此他们没有部署。您的静态网站不应该需要的模块在运行时,文件等等部署(千!)在没有有效的或需要的。

可能您需要他们的一些/个的情况 - 例如,一个function或者你可以从需要其中的一个文件甚至在你的静态网站 - 这很好,随时将它复制到发布目录明确。但是,这并不是常态:)

© www.soinside.com 2019 - 2024. All rights reserved.