簡體   English   中英

如何將 .gitignore 文件包含在我的 npm 模塊中?

[英]How do I include a .gitignore file as part of my npm module?

我正在構建一個 npm 模塊,它將為某些軟件項目生成特定的項目模板。 因此,當開發人員安裝我的 npm 模塊並運行它時,我希望程序以某種方式創建文件和文件夾。

我想包含在項目模板中的一個這樣的文件是 .gitignore 文件,因為軟件項目將假定它將通過 git 跟蹤。 但是,當我在我的模塊上調用“npm install”時,npm 會將我所有的 .gitignore 文件重命名為 .npmignore 文件。 在分發模塊時,如何確保我的 .gitignore 文件不會被 npm 篡改?

https://github.com/npm/npm/issues/1862

看起來這是一個已知問題。 底部的答案似乎是推薦的方法。 如果問題或鏈接被破壞:

對我們來說,我認為更好的解決方案是明確的文檔,如果作者希望在他們的生成器中使用 .gitignore,他們需要將他們的文件命名為 .##gitignore##,這將是一個 gitignore 設置為相同的值字符串 gitignore。

這樣,作為模板文件發布到 npm 的文件稱為 .##gitignore## 並且不會被 npm 捕獲,但稍后它會被替換為字符串 .gitignore。

您可以看到處理npm 問題 1862 的多個提交:

  • 這個項目添加了一個rename.json

     lib/init-template/rename.json { ".npmignore": ".gitignore", }
  • 這個重命名了.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';

目前 npm 不允許.gitignore文件作為 npm 包的一部分包含在內,而是將其重命名為.npmignore

一個常見的解決方法是在發布之前將其從.gitignore重命名為gitignore 然后作為 init 腳本的一部分,將gitignore重命名為.gitignore 這種方法在Create React App

下面是如何在 Node 中執行此操作,來自Create React App init 腳本的代碼

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

編輯:即使這個答案導致.gitignore被包含在發布的包中(由unpkg證明),在運行npm install.gitignore文件被簡單地刪除 因此,即使讓 NPM 包含該文件也是不夠的。

另一個解決方案(更簡單的imo):

在 repo 中包含.gitignore.npmignore 將以下內容添加到您的.npmignore文件中:

!.gitignore
!.npmignore

現在.npmignore已經存在於已發布的包中,NPM 不會重命名.gitignore

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM