如何自动化而不是每次都为javascript开发创建新的项目结构

Posted

技术标签:

【中文标题】如何自动化而不是每次都为javascript开发创建新的项目结构【英文标题】:How to automate and not create a new project structure every time for javascript development 【发布时间】:2020-09-10 19:49:45 【问题描述】:

我想避免为我的所有项目创建项目结构的麻烦,以便我可以使用ALE linting 和 fix。我采取了一种方法(最后),但我很确定有一个更优雅的解决方案。无论如何,总的来说,步骤是:

创建package.json 使用 npm 安装所有软件包 对于eslint: 创建.eslintrc.json,js,yaml 安装插件并创建规则 集成插件(airbnb、prettier 等) 对每个新项目重复此操作

对于 npm 安装,我知道 -g 可以全局安装,但是如果我将 .eslintrc.json 放在我的主文件夹中,当我在 VIM 中打开它时,它说它无法加载插件(airbnb、prettier 等)风格指南。大概是因为我的项目文件夹中没有 node_modules 文件夹。

因此,我决定创建一个模板文件夹,其中包含上述序列中的所有内容。并将该结构复制到一个文件夹中,我在该文件夹中以 autocmd 从 VIM 打开我的 .html.css.js.json 文件。

这是我.vimrc的相关部分

autocmd FileType javascript,json,css,html silent exec '! '.$HOME.'/Documents/eslint-template/prepare.sh

这里是prepare.sh

$ cat Documents/eslint-template/prepare.sh 
#!/bin/bash

echo Preparing environment...
templateFolder=$HOME/Documents/eslint-template
files=( $templateFolder/.,* )
for file in $files[@]; do
  [ "$(basename $0)" == "$(basename $file)" ] && continue
  destFile=$PWD/$(basename $file)
  diff -q $file $destFile > /dev/null 2>&1 ||
    cp -r $file $PWD/
done

rsync -azz --delete $templateFolder/node_modules/ node_modules/ > /dev/null 2>&1

echo Preparation completed!

我一直在调整和测试,它运行良好(不过我会进行更多测试)。但是打开一个简单的.html 文件可能需要10 到15 秒,因为它必须将整个node_modules 结构从模板复制到新项目。即使是 rsync 中的 -zz 选项,当从 VIM 中运行时,似乎也比直接从终端运行要慢很多。

那么,问题是,还有什么其他的替代方法可以做到这一点?

【问题讨论】:

【参考方案1】:

您可以使用类似于此CLI tool 的内容。您可以将项目结构放在templates 文件夹中。请避免将node_modules 放在那里,因为我们总是可以安装package.json 中列出的依赖项。

【讨论】:

但是避免每次下载一堆包是我想要避免的。 存储 node_modules 文件夹是一种不好的做法。对于更大的项目,大小可以达到千兆字节。另外,MacOS 中的 node_modules 文件夹可能无法在其他平台上正常运行。 但是无论如何我都会在项目级别拥有 node_modules 文件夹,不是吗?你的意思是我不需要存储模块两次(一个用于项目,另一个用于模板),对吗?但是如果我有 10 个项目,我会存储 10 次而不是 10 + 1(模板),这开始失去意义,不是吗?对我来说,节省空间的理想方法似乎是使用全局 node_modules,但我不能,正如我发布的那样。至于平台,我为什么要尝试从一个系统到另一个系统使用模块?我在同一台机器里问。 每个项目的 node_modules 都不相同。您将在一个项目中需要相同的包,而在另一个项目中不需要。此外,有时您需要在一个项目中支持旧版本,而在另一个项目中支持新版本。仅使用一个全局包很难做到这一点。

以上是关于如何自动化而不是每次都为javascript开发创建新的项目结构的主要内容,如果未能解决你的问题,请参考以下文章

每次输入更改后,纱线开始更新我的开发服务器,而不是仅在我保存之后

如何自动启动节点服务?

两数相加

使用Javascript和Places会话令牌的Google地方自动填充示例

只安装一次节点,而不是每次都使用 Maven 构建

NX二次开发判断两根曲线是不是连接