我正在构建一个npm模块,它将为某些软件项目生成特定的项目模板。因此,当开发人员安装并运行我的npm模块时,我希望该程序以某种方式创建文件和文件夹。
我想要在项目模板中包含的一个这样的文件是.gitignore文件,因为软件项目将假设它将通过git进行跟踪。然而,当我在我的模块上调用"npm install“时,npm将我所有的.gitignore文件重命名为.npmignore文件。如何确保在分发模块时.gitignore文件不会被npm篡改?
发布于 2017-01-18 16:29:02
https://github.com/npm/npm/issues/1862
看起来这是一个已知的问题。底部的答案似乎是推荐的方法。如果问题或链接被破坏:
对于我们来说,我认为一个更好的解决方案将是明确的文档,如果作者希望在他们的生成器中使用.gitignore,他们将需要将他们的文件命名为.##gitignore##,这将是一个设置为相同字符串的值。
这样,作为模板文件发布到npm的文件称为.##gitignore##,不会被npm捕获,但随后它将被字符串替换为.gitignore.
发布于 2014-07-27 04:59:12
您可以看到处理npm issue 1862的多个提交
}
.gitignore
:/init-template/rename.json{ ".npmignore":".gitignore",libtemplates/default/.gignore函数模板/default/{%=gitignore%} index.js @@ -114,6 +114,10 @@ generator._pkgData = function (pkg) {+ // npm会将.gitignore重命名为.npmignore:+ // ref + pkg.gitignore = '.gitignore';
发布于 2020-12-31 14:29:53
目前,npm不允许将.gitignore
文件作为npm包的一部分,而是将其重命名为.npmignore
。
一种常见的解决方法是在发布之前将.gitignore
重命名为gitignore
。然后,作为初始化脚本的一部分,将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'),
[]
);
}
https://stackoverflow.com/questions/24976950
复制