Feature request from hostep, posted on GitHub Jun 26, 2016
Steps to reproduce
- Install Magento 2.1.0 using composer but use the
--no-dev
flag
- Look at the
dev/
directory in the filesystem
Expected result
- The
dev/
directory should be empty or non-existing
Actual result
- 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: