Skip to content

[2.1.0] composer install --no-dev should not install development dependencies #5262

Closed
@hostep

Description

@hostep

Steps to reproduce

  1. Install Magento 2.1.0 using composer but use the --no-dev flag
  2. Look at the dev/ directory in the filesystem

Expected result

  1. The dev/ directory should be empty or non-existing

Actual result

  1. The dev/ directory exists and contains a bunch of development stuff

Discussion

In an effort to try to find the best options of deploying a Magento 2 installation to a production server, I keep discovering issues which aren't ideal.
As a best practise, we use composer install --no-dev --prefer-dist --optimize-autoloader on a production server when deploying. I would expect that no development dependencies gets installed because of this, but this is not true.

This isn't only about the /dev directory, but also for example about the lib/web/css/docs/ directory.
The last one for example causes the setup:static-content:deploy command to compile a less file which has absolutely no purpose of existing on a production server while it takes multiple seconds to compile this file, per locale, per theme.
In a very quick test, I discovered that when removing the above directories before executing setup:di:compile and setup:static-content:deploy makes those two run about 58 seconds faster (on my local machine) then without removing those directories.

Here is a list of files/directories which I believe shouldn't get deployed to a production server:

  • .htaccess.sample
  • .php_cs
  • .travis.yml
  • CHANGELOG.md
  • CONTRIBUTING.md
  • COPYING.txt
  • Gruntfile.js.sample
  • ISSUE_TEMPLATE.md
  • LICENSE.txt
  • LICENSE_AFL.txt
  • nginx.conf.sample
  • package.json.sample
  • php.ini.sample
  • dev/
  • lib/web/css/docs/
  • phpserver/
  • ...

(the license files, I'm not sure about)

I think most of these files are getting into place because of the mapping in the composer.json file of the magento2-base module.
It would be great if those mappings can get split of into a mapping for development purposes and one for all environments.
My suggestion would be to add a map-dev to the extra section in the composer.json similar as the normal map section and update the magento-composer-installer project to support this and only install the map-dev files when you run composer without the --no-dev flag.

This is all theoretically, I haven't tested this properly, but let me know what you think.

I know that in your deploy scripts, you can simply delete the files you don't want after composer install --no-dev has run, but I think it makes sense to automate this, because not everyone will notice these issues.

Slightly related issues:

Metadata

Metadata

Assignees

No one assigned

    Labels

    Issue: Ready for WorkGate 4. Acknowledged. Issue is added to backlog and ready for developmentimprovement

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions