VM开发取得进展! 将node_modules移动到任何你喜欢的地方并使用它们!
目录
你好。
我是Mandai,负责Wild 开发团队。
即使你不使用 Node.js 开发系统,我认为也存在使用 Node.js 来减少工作量的常见模式。
例如,我使用 webpack 预编译 CSS 和转译 JS 文件,对于日常任务,我使用 gulp 创建脚本并定期运行它们。有各种各样的用例,我觉得它正在逐渐成为我日常生活的一部分。那。
Node.js 有一个名为 npm 的包管理工具,但是这次我们总结了当由于某种原因需要将 node_modules 目录移到项目目录之外时该怎么做。
什么叫有一定的理由呢? !
原因是开发环境的问题。
我认为VM经常被用作开发环境,但这次我将使用Windows 10作为主机操作系统,在Virtualbox上运行CentOS 7(并使用vagrant管理它)。
在这样一个共同的开发环境中出现了意想不到的陷阱。
看似突然,但我特别的一点是,我在开发时一直使用 Visual Studio Code(以下简称 VSCode),而今年我就想着坚持下去,而且今年已经是 8 月份了,我已经习惯了很多。
VSCode 使用 Node.js(TypeScript)开发,并使用 Electron 成为可以在多个平台上使用的编辑器。
这是!
VSCode 快捷键在 Linux 上很难使用,因此无法选择在虚拟机上安装 VSCode 并使用它进行开发。这只不过是压力(我确信 Windows 版本非常容易使用,因为它是由 Microsoft 开发的)。
因此,开发环境的配置也需要围绕VSCode进行更改。
综上所述,通过使用VirtualBox的共享文件夹功能共享整个项目目录,将Windows VSCode编辑的内容共享给VM,仅此而已。
如果以无头模式启动 VM,则可以减少意外负载,因此最多可以运行 3 个 VM。
陷阱 #1 “node_modules 目录无法共享”
假设您了解情况,那么大问题仍然存在。
这就是问题所在:“node_modules 目录无法共享。”
文件可以共享,但如果仔细考虑一下,node_modules 是在 npm install 时根据平台创建的,因此包含与平台相关的二进制文件的模块可能会出现问题。
如果将node_modules放在项目目录之外,这个问题似乎可以解决。
相反,您需要为每个开发平台执行 npm install,但我认为 npm install 就是这样,所以我并不担心它。
陷阱#2“超出最大调用堆栈大小”
在共享文件夹内执行 npm install 时,我经常遇到错误“超出最大调用堆栈大小”。
我不太明白,但似乎这个错误的原因是共享文件夹。 参考资料 - npm 错误!代码 ETXTBSY · 问题 #9979 · npm/npm · GitHub
所以,这个问题似乎可以通过将node_modules放在项目目录之外来解决。
在任何你喜欢的地方安装node_modules
实际上,您可以使用 npm config 命令更改node_modules 的位置。
可以使用以下命令更改它。
npm 配置设置前缀“/home/vagrant”
npm 识别的 node_modules 目录现在是“/home/vagrant/node_modules”。
但是,这仅意味着 npm 现在将 node_modules 的位置识别为“/home/vagrant/node_modules”,因此即使您在此状态下运行 npm install,node_modules 仍将位于与 package.json 相同的级别。是执着的...
因此,在安装命令中也要指定前缀,并使用以下命令进行安装。
npm install --prefix “/home/vagrant”
这可能会导致错误。
这种错误。
npm WARN saveError ENOENT:没有这样的文件或目录,打开'/home/vagrant/package.json'
没有package.json! 有!
我想了一下,--prefix指定的目录下需要package.json!
硬复制很难管理,因此我们将使用符号链接。
cd /home/vagrant ln -s /home/vagrant/src/package.json ln -s /home/vagrant/src/package-lock.json # 有时
这是有package-lock.json的问题,但是在第一次安装的情况下,原始文件将存在于“/home/vagrant”中,因此一旦安装完成,您必须将其复制到工作目录发生。
这也适用于 VSCode。我无能为力。
之后,使用前缀运行 npm install 继续安装。
顺便说一句,我认为 npm install 非常慢,但是当我在共享文件夹之外运行它时,它最终变得一团糟。
共享文件夹很方便,但速度很慢。
有时,这不仅仅是在任何地方。
尽管我说它可以安装在任何地方,但这并不意味着它可以安装在任何地方。
以下是当node_modules安装在某个目录中并且执行任务运行器gulp时发生的情况。
gulp sass [06:46:05] 在 ~/src 中找不到本地 gulp [06:46:05] 尝试运行: npm install gulp
我确信 gulp 是在全局和本地安装的,所以我认为奇怪的原因是 node_modules 与 package.json 不在同一层。
经过一番谷歌搜索后,我似乎无法弄清楚,所以我查看了 gulp 源并找到了答案。 → gulp-cli/index.js at master · gulpjs/gulp-cli · GitHub
由于 cfgLoadOrder 数组中包含的唯一字符串是 home 和 cwd,因此最好将 node_modules 直接放在主目录下。
这就是为什么示例中粘贴的命令的前缀是主目录。
当我在主目录下创建node_modules时,即使node_modules不在通常的位置,我也能够成功执行gulp任务。
我觉得写一个配置文件会给我更多的自由,但我不太明白这一点,所以如果有时间我会研究一下。
概括
我各种方式都跑题了,文字也变得有点乱,所以我就在这里总结一下。
- 有时,npm 安装目录无法在虚拟机的共享文件夹中共享。
- 如果您使用需要依赖于平台的二进制文件的模块,则为 NG
- 由于共享文件夹的性质,您甚至无法在共享文件夹上运行 npm install。
- 如果主机和来宾都是*nix系统,也许可以?
- 可以使用 npm install 命令的选项“--prefix”更改创建 node_modules 的位置。
- package.json必须提前放在“--prefix”指定的目录下(符号链接也可以)
- 有时候,比如gulp,node_modules的位置不是空闲的。
- Node.js 很方便
最后我觉得还是直接放在home目录下比较好。
我为每个项目使用不同的虚拟机,尽管我可以使用配置文件来管理它,但我认为只为我自己使用 gitignore 会很奇怪。
能够将 node_modules 从工作目录中分离出来真是太棒了。
就是这样。