我正在构建一个npm模块,它将为某些软件项目生成特定的项目模板。因此,当开发人员安装我的npm模块并运行它时,我希望程序以某种方式创建文件和文件夹。
我想在项目模板中包含的一个这样的文件是.gitignore文件,因为软件项目将假设它将通过git进行跟踪。但是,当我打电话给" npm install"在我的模块上,npm将我的所有.gitignore文件重命名为.npmignore文件。在分发模块时,如何确保我的.gitignore文件不会被npm篡改?
答案 0 :(得分:2)
https://github.com/npm/npm/issues/1862
看起来这是一个已知问题。底部的答案似乎是推荐的方法。如果问题或链接被破坏:
对于我们来说,我认为一个更好的解决方案是明确的文档,如果作者希望在他们的生成器中使用.gitignore,他们将需要命名他们的文件。## gitignore ##,这将是一个值gitignore集到同一个字符串gitignore。
通过这种方式,将作为模板文件发布到npm的文件被调用。## gitignore ##并且不会被npm捕获,但之后它会被字符串替换为.gitignore。 / p>
答案 1 :(得分:0)
您可以看到多个处理npm issue 1862的提交:
this project adds a rename.json
:
lib/init-template/rename.json
{
".npmignore": ".gitignore",
}
this one renames the .gitignore
:
templates/default/.gitignore → templates/default/{%=gitignore%}
index.js
@@ -114,6 +114,10 @@ generator._pkgData = function (pkg) {
+ // npm will rename .gitignore to .npmignore:
+ // [ref](https://github.com/npm/npm/issues/1862)
+ pkg.gitignore = '.gitignore';
答案 2 :(得分:0)
目前 npm 不允许将 .gitignore
文件作为 npm 包的一部分包含在内,而是将其重命名为 .npmignore
。
一种常见的解决方法是在发布前将其从 .gitignore
重命名为 gitignore
。然后作为 init 脚本的一部分,将 gitignore
重命名为 .gitignore
。这种方法用于Create React App
这是在 Node 中的操作方法,代码来自 Create React App init script
const gitignoreExists = fs.existsSync(path.join(appPath, '.gitignore'));
if (gitignoreExists) {
// Append if there's already a `.gitignore` file there
const data = fs.readFileSync(path.join(appPath, 'gitignore'));
fs.appendFileSync(path.join(appPath, '.gitignore'), data);
fs.unlinkSync(path.join(appPath, 'gitignore'));
} else {
// Rename gitignore after the fact to prevent npm from renaming it to .npmignore
// See: https://github.com/npm/npm/issues/1862
fs.moveSync(
path.join(appPath, 'gitignore'),
path.join(appPath, '.gitignore'),
[]
);
}