Чи ставите Ви Babel та Webpack у devDependency або Dependencies?


79

Я новачок у npm і насправді не розумію, що повинно входити у залежності від devDependencies. Я знаю, що для тестування бібліотек їм слід увійти у розробник, але як щодо таких речей, як babel і webpack? Чи повинні вони бути також у dev, тому що вони використовуються лише для перекомпіляції es6 та JSX у ванільний JS? Я розумію, що коли ви розгортаєтесь на heroku, він вже виконує перекомпіляцію з необхідними бібліотеками, тому немає необхідності розміщувати їх у виробництві?

  "dependencies": {
    "babel-core": "^6.7.7",
    "babel-eslint": "^6.0.4",
    "babel-loader": "^6.2.4",
    "babel-plugin-react-transform": "^2.0.2",
    "babel-plugin-transform-object-rest-spread": "^6.6.5",
    "babel-plugin-transform-react-display-name": "^6.5.0",
    "babel-polyfill": "^6.7.4",
    "babel-preset-es2015": "^6.6.0",
    "babel-preset-react": "^6.5.0",
    "bootstrap": "^3.3.7",
    "css-loader": "^0.23.1",
    "es6-promise": "^3.2.1",
    "eslint": "^2.9.0",
    "eslint-plugin-babel": "^3.2.0",
    "eslint-plugin-react": "^5.0.1",
    "express": "^4.13.4",
    "extract-text-webpack-plugin": "^1.0.1",
    "file-loader": "^0.9.0",
    "lodash": "^4.15.0",
    "react": "^15.0.2",
    "react-addons-css-transition-group": "^15.0.2",
    "react-dom": "^15.0.2",
    "react-redux": "^4.4.5",
    "react-transform-catch-errors": "^1.0.2",
    "react-transform-hmr": "^1.0.4",
    "redbox-react": "^1.2.3",
    "redux": "^3.5.2",
    "redux-form": "^6.1.0",
    "rimraf": "^2.5.2",
    "style-loader": "^0.13.1",
    "webpack-dev-middleware": "^1.6.1",
    "webpack-hot-middleware": "^2.10.0"
  },
  "devDependencies": {
    "babel-register": "^6.9.0",
    "chai": "^3.5.0",
    "mocha": "^2.5.3",
    "sinon": "^1.17.4",
    "webpack": "^1.13.2"
  }

stackoverflow.com/questions/18875674/… . Це дасть вам деяку необхідну ясність!
semuzaboi

Відповіді:


62

В babelі webpackпакетах йтимуть в devDependenciesсекцію , так як ці пакети використовуються в коли transpiling і перев'яжіть-кий коду в ванільний JavaScript в bundle.js& файлі і т.д. (ів).

У виробництві ви запускатимете свій код зі bundle.jsзбірки / згенерований код більше не потребуватиме цих залежностей.


Також у виробництві збірка буде транслюватися лише за допомогою Babel? Чи можете ви допомогти мені зрозуміти це?
Harkirat Saluja

2
На виробництві у вашій папці збірки або розгортання буде вміст, який вже переведено babel до ES5. Отже, вони вам насправді не потрібні для запуску програми.
semuzaboi

42
Одним винятком є ​​babel-polyfill, оскільки поліфіл необхідний під час виконання: babeljs.io/docs/usage/polyfill
HaoCS

2
@HaoCS Я бачив, як документи Бабеля кажуть ставити babel-polyfillзалежності, але я не розумію, чому. Чи не буде цей пакет включати його після запуску збірки? Я не бачу причини, що це не може бути у devDependencies. Хотілося б більше розуміння.
The Qodesmith

11
У відповідь на запитання Харкірата (і коментар, що відповідає на нього) є деякі припущення щодо того, як ви розгортаєтесь. Коли люди кажуть, що "Babel - це залежність розробника", вони очікують, що ви вкладете свій компільований Babel код у Git (або будь-що інше, що ви використовуєте), а потім розмістять цей скомпільований код на своєму сервері. У цьому сценарії Babel є залежністю розробника, оскільки він ніколи не працює на сервері. Але якщо ви замість цього зафіксуєте звичайний код і запустите Babel на своєму сервері, ви, мабуть, не хочете його як залежність від розробника, оскільки він потрібен серверу.
machineghost

26

Незважаючи на те, що в основному кажуть усі, я збираюся запропонувати частину розуму ... це насправді досить просто:

Ваш проект буде npm installредаговано іншим проектом? aka ви створюєте модуль npm? це опиниться в інших проектах package.json?

Ні?

Потім покладіть все dependencies.

Так?

  • dependencies: Речі, які ви хочете, щоб споживачі та розробники проектів вашого проекту встановили:
  • peerDependencies: Що потрібно вашим подальшим користувачам переконатися, що вони встановили
  • bundleDependencies: Речі, які будуть потрібні вашим подальшим користувачам, і їх не потрібно буде встановлювати окремо, тому що коли ви будете npm publish, вони будуть "в комплекті" з вашим пакетом.
  • optionalDependencies: Речі, які приємно мати, але відсутність не призведе до фатальної помилки
  • devDependencies: речі, які використовуються лише під час роботи над вашим проектом.

Короткий момент полягає в наступному: модулі не магічно встановлюються інакше. Вони або встановлюються, або ні.


Я думаю, що це пишеться "залежності"
Камеронт

6
Для звичайного додатка (не nb lib), якщо вкласти все, це dependenciesозначає, що ваші інструменти розробки будуть розгорнуті разом із вашим додатком у виробництві. Погана ідея.
jfroy

@jfroy, не могли б ви підтвердити це? як посилання на джерело. Я пам’ятаю, як один із наших js-розробників згадував, що коли webpack збирає та зв’язує js-код, він перевірятиме, імпортований пакет чи ні, а потім вирішує, якщо його потрібно упакувати чи ні. Однак пакунок пакета навряд чи буде імпортовано та використаний у коді програми, правда? У цьому випадку навіть babel додається до залежностей, тоді він не буде упакований, так? Дякую
Джефф Чен

2
@JeffChen, погляньте на визначення з документації npm: docs.npmjs.com/files/package.json#dependencies . Вони спеціально попереджають, щоб не ставили компілятори в залежності. Тремтіння дерев, застосоване Webpack та іншими пакувальниками, дійсно видалить невикористаний код у виробничих збірках, тим самим видаляючи будь-які неправильно призначені залежності розробників, але нічого у цій відповіді чітко не сказано, що саме на це вони покладаються, щоб виправдати неправильно визначений пакет.json.
jfroy

2
@jfroy ми використовуємо багатоступеневі збірки docker. Тож жодне з ваших занепокоєнь не має значення. Насправді єдине, що закінчується виробництвом - це вихідний пакет js / css / png / etc. Дійсно. зусилля, на які ви спрямовуєтесь для того, щоб розробити це розділення фронтальних залежностей, навіть близько не варті винагороди.
airtonix

-5

Залежність від Dev - це те, що використовується лише для сервера розробки, це devDepedency: Усі пакети, які не використовуються у вихідному коді або імпортовані, є devDependency

"babel-cli": "^6.26.0",
"babel-core": "^6.26.0",
"babel-loader": "^7.1.4",
"babel-preset-env": "^1.6.1",
"babel-preset-react": "^6.24.1",
"clean-webpack-plugin": "^0.1.19",
"copy-webpack-plugin": "^4.5.1",
"css-loader": "^0.28.11",
"file-loader": "^1.1.11",
"html-webpack-plugin": "^3.2.0",
"mini-css-extract-plugin": "^0.4.0",
"node-sass": "^4.8.3",
"optimize-css-assets-webpack-plugin": "^4.0.0",
"prop-types": "^15.6.1",
"sass-loader": "^7.0.1",
"style-loader": "^0.21.0",
"uglifyjs-webpack-plugin": "^1.2.5",
"webpack": "^4.6.0",
"webpack-cli": "^3.1.1",
"webpack-dev-server": "^3.1.9"

6
Вони потрібні для створення додатка. Все залежить від того, де ви створюєте додаток.
Earl3s
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.