如何自动化而不是每次都为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开发创建新的项目结构的主要内容,如果未能解决你的问题,请参考以下文章
每次输入更改后,纱线开始更新我的开发服务器,而不是仅在我保存之后