Как игнорировать модули/ каталог узлов пакетов с областью действия во время установки npm?

у меня есть репозиторий, содержащий package.json который содержит зависимости области. У меня также есть .npmignore файл предназначен для белого списка всех файлов и подкаталогов в dist/. Проблема в том, что все зависимости области включены при запуске npm install @private/a другой хранилище. Это включает как частные пакеты npm, так и общедоступные пакеты, такие как @uirouter.

пакета.в JSON:

   {
      "name": "@private/a",
      "version": "1.0.0",
      "description": "",
      "main": "dist/index.js",
      "scripts": {
        "test": "echo "Error: no test specified" && exit 1"
      },
      "repository": {
        "type": "git",
        "url": "git+ssh://git@bitbucket.org/private/a.git"
      },
      "author": "",
      "license": "ISC",
      "homepage": "https://bitbucket.org/private/a#readme",
      "devDependencies": {
        "gulp": "^3.9.1",
        "gulp-angular-embed-templates": "^2.3.0",
        "gulp-concat": "^2.6.1",
        "gulp-jshint": "^2.0.4",
        "gulp-rename": "^1.2.2",
        "gulp-sass": "^3.0.0",
        "gulp-uglify": "^2.0.0",
        "jshint": "^2.9.4"
      },
      "dependencies": {
        "@private/b": "^1.0.0",
        "@private/c": "^1.0.0"
      }
    }

.npmignore

**
!dist/**

несмотря на эти два файла, когда я запустить npm install @private/a --save в другом репозитории он устанавливает зависимость вместе со всеми ее зависимостями:

/node_modules/@private/a/dist/index.js
/node_modules/dist/css/styles.css
/node_modules/@private/a/node_modules/@private/b
/node_modules/@private/a/node_modules/@private/c
package.json

это должно быть только так:

/node_modules/@private/a/dist/index.js
/node_modules/dist/css/styles.css
package.json

как я могу этого достичь? Я пробовал разные варианты .npmignore но не повезло.

3 ответов


.npmignore не имеет отношения к тому, что вы пытаетесь сделать. Этот файл определяет только те части кода пакета npm, которые попадают в реестр npm. Поэтому он работает так, как рекламируется.

ваша проблема должна быть в вашем npmconfig или из-за использования более старой версии npm. Последняя версия устанавливает материал как таковой:

/node_modules/@private/a/dist/index.js
/node_modules/@private/b/...
/node_modules/@private/c/...
package.json

Я проверил, что это происходит с последним npm. Но было время, когда npm устанавливал зависимости во вложенную структуру. Видеть вот например. Поэтому я предлагаю:

  1. убедитесь, что у вас есть последний узел и npm.
  2. убедитесь, что ваша конфигурация npm не вынуждает устаревшее связывание. Запустить npm get legacy-bundling. Убедитесь, что это ложь.

есть несколько случаев, когда вложенность зависимостей происходит законно даже с последним npm. См.этой. Но я предполагаю, что ваша проблема не из-за этого. Вы можете проверить, просто делая npm install @private/a в пустую папка.


Node установит ваши файлы пакетов вместе со всеми зависимостями, объявленными в разделе


вам нужно заблокировать вашу зависимость. Вы можете проверить npm shrinkwrap.