如何将.gitignore文件作为我的npm模块的一部分包含在内?

时间:2014-07-27 01:03:41

标签: javascript node.js git npm scaffolding

我正在构建一个npm模块,它将为某些软件项目生成特定的项目模板。因此,当开发人员安装我的npm模块并运行它时,我希望程序以某种方式创建文件和文件夹。

我想在项目模板中包含的一个这样的文件是.gitignore文件,因为软件项目将假设它将通过git进行跟踪。但是,当我打电话给" npm install"在我的模块上,npm将我的所有.gitignore文件重命名为.npmignore文件。在分发模块时,如何确保我的.gitignore文件不会被npm篡改?

3 个答案:

答案 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'),
      []
    );
  }