#laravel #npm #dependencies #packages.json
#laravel #npm #зависимости #packages.json
Вопрос:
В Laravel 5.3 файл package.json выглядит следующим образом: все пакеты находятся в devDependencies. Кто-нибудь может сказать мне, какие пакеты также необходимы в производстве. Я думаю, что все, кроме browsersync.
package.json
{
"private": true,
"scripts": {
"prod": "gulp --production",
"dev": "gulp watch"
},
"devDependencies": {
"gulp": "^3.9.1",
"jquery": "^3.1.0",
"laravel-elixir": "^6.0.0-9",
"laravel-elixir-browsersync-official": "^1.0.0",
"laravel-elixir-vue-2": "^0.2.0",
"laravel-elixir-webpack-official": "^1.0.2",
"lodash": "^4.16.2",
"vue": "^2.0.1",
"vue-resource": "^1.0.3"
},
"dependencies": {
"dropzone": "^4.3.0"
}
}
Я думаю, что некоторые пакеты, такие как vue.js также необходимы в рабочем режиме, поэтому я бы переместил их в dependencies, а не в devDependencies.
Комментарии:
1. Непонятно, что вы пытаетесь сделать. Вы хотите использовать пакет laravel в своем приложении или вы хотите работать над самим пакетом? Также какую модульную систему вы используете для зависимостей (CommonJS, Bower, …)?
2. @BrunoRanschaert Я отредактировал свой пост
Ответ №1:
Все это есть, devDependencies
если вы используете elixir
:
Во-первых, вам не нужно elixir
в производстве, потому что это просто оболочка для gulp
, надеюсь, вы скомпилируете свои ресурсы на своей машине разработки и загрузите их.
Все другие библиотеки javascript npm могут быть скомпилированы с elixir
, поэтому нет необходимости иметь их на рабочей машине. По умолчанию elixir
используется webpack
для компиляции resourcesassetsjsapp.js
в publicjsapp.js
, которые вам нужно включить на свои веб-страницы в качестве script
.
Если вы посмотрите на: resourcesassetsjsbootstrap.js
вы увидите пакеты, которые laravel
добавляются по умолчанию (такие вещи, как vue
, bootstrap
и jQuery
), поэтому, если, например, вы хотите добавить dropzone
в свой проект, вы просто добавляете его в bootstrap.js
вот так:
require('dropzone');
Который теперь также будет компилироваться dropzone
для publicjsapp.js
создания dropzone
a devDependency
.
Комментарии:
1. большое вам спасибо за ваш ответ, теперь мне многое стало яснее 🙂 один дополнительный вопрос… как мне импортировать таблицы стилей из папки node_modules?
2. Для таблиц стилей, в
@import
которых вы просто используетеresources/assets/sass/app.scss
инструкцию, вы можете включить либоcss
, либоscss
файлы (или папку), вам просто нужно указать весь путь от корня вашего проекта, например, для bootstrap, который у вас есть@import "node_modules/bootstrap-sass/assets/stylesheets/bootstrap";
3. хорошо, спасибо, что сработало… У меня возникла ошибка при размещении .css в конце пути
4. Предостережение: при использовании
npm shrinkwrap
для блокировки определенных версий пакетов (чтобы вы нажимали на то, над чем вы работали в dev), по умолчаниюdevDependencies
они НЕ заблокированы. Для этого используйтеnpm shrinkwrap --dev
.
Ответ №2:
Кроме того, в более новых версиях Laravel, которые используют Laravel Mix (который является оболочкой вокруг Webpack), все ваши зависимости могут находиться под devDependencies
.
Webpack компилирует все вплоть до одного файла ( /js/app.js
) или нескольких файлов, если, например, вы используете extract
метод для сборки ваших файлов ( /js/app.js
, /js/app.js
, /js/manifest.js
). И это единственные файлы, которые нужны вашему браузеру для выполнения вашего кода JavaScript; и для Webpack для их сборки достаточно найти все зависимости в devDependencies
.
Комментарии:
1. Что, если мы не хотим устанавливать некоторые из них
devDependencies
в производственной среде? Конкретно, я не хочу использовать обаbrowser-sync ; browser-sync-webpack-plugin
пакета в рабочей среде, потому что по крайней мере один из них устанавливает cookie,io
который нежелателен для конечного пользователя, в соответствии с законом / духом GDPR.2. Обратите также внимание, что вы, возможно, имеете в виду
npm run prod
, когда говорите «Webpack компилирует все в один файл (/js/app.js),»