diff --git a/common/lib/xmodule/xmodule/static_content.py b/common/lib/xmodule/xmodule/static_content.py index 2c1622111c66..aecd2091fec2 100755 --- a/common/lib/xmodule/xmodule/static_content.py +++ b/common/lib/xmodule/xmodule/static_content.py @@ -74,7 +74,7 @@ class VideoBlock(HTMLSnippet): def write_module_styles(output_root): """Write all registered XModule css, sass, and scss files to output root.""" - return _write_styles('.xmodule_display', output_root, sorted(_list_modules(), key=str), 'get_preview_view_css') + return _write_styles('.xmodule_display', output_root, _list_modules(), 'get_preview_view_css') def write_module_js(output_root): @@ -94,20 +94,26 @@ def write_descriptor_js(output_root): def _list_descriptors(): """Return a list of all registered XModuleDescriptor classes.""" - return [ - desc for desc in [ - desc for (_, desc) in XModuleDescriptor.load_classes() - ] - ] + XBLOCK_CLASSES + return sorted( + [ + desc for desc in [ + desc for (_, desc) in XModuleDescriptor.load_classes() + ] + ] + XBLOCK_CLASSES, + key=str + ) def _list_modules(): """Return a list of all registered XModule classes.""" - return [ - desc.module_class for desc in [ - desc for (_, desc) in XModuleDescriptor.load_classes() - ] - ] + XBLOCK_CLASSES + return sorted( + [ + desc.module_class for desc in [ + desc for (_, desc) in XModuleDescriptor.load_classes() + ] + ] + XBLOCK_CLASSES, + key=str + ) def _ensure_dir(directory): @@ -269,7 +275,13 @@ def write_webpack(output_file, module_files, descriptor_files): outfile.write( textwrap.dedent(u"""\ module.exports = {config_json}; - """).format(config_json=json.dumps(config, indent=4)) + """).format( + config_json=json.dumps( + config, + indent=4, + sort_keys=True + ) + ) ) diff --git a/package-lock.json b/package-lock.json index 6814471a9fca..c7485c3b51f1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2522,6 +2522,11 @@ "integrity": "sha1-lCg191Dk7GGjCOYMLvjMEBEgLvw=", "dev": true }, + "charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=" + }, "cheerio": { "version": "1.0.0-rc.2", "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.2.tgz", @@ -3070,6 +3075,11 @@ "which": "^1.2.9" } }, + "crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=" + }, "crypto-browserify": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", @@ -9038,6 +9048,16 @@ "integrity": "sha1-zrnatkWPSpVW3DbpHa9+y/6urHY=", "dev": true }, + "md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "requires": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, "md5.js": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", @@ -10901,7 +10921,7 @@ "private": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha1-I4Hts2ifelPWUxkAYPz4ItLzaP8=" + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==" }, "process": { "version": "0.11.10", @@ -15419,6 +15439,14 @@ } } }, + "webpack-md5-hash": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/webpack-md5-hash/-/webpack-md5-hash-0.0.6.tgz", + "integrity": "sha512-HrQ0AJpeXHRa3IjsgyyEfTx8EqYs5y/4x/WklSYsNDcqBixHzCkrmJV5U+4ks+sx7ycKoIdqWLdyuk913FCS+Q==", + "requires": { + "md5": "^2.0.0" + } + }, "webpack-merge": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.1.1.tgz", diff --git a/package.json b/package.json index 527c68b1aa5f..a9a60ff72312 100644 --- a/package.json +++ b/package.json @@ -63,6 +63,7 @@ "underscore.string": "3.3.5", "webpack": "2.7.0", "webpack-bundle-tracker": "0.2.1", + "webpack-md5-hash": "0.0.6", "webpack-merge": "4.1.1", "whatwg-fetch": "2.0.3", "which-country": "1.0.0" diff --git a/webpack.prod.config.js b/webpack.prod.config.js index 360ab56d4d01..5e32fa10e316 100644 --- a/webpack.prod.config.js +++ b/webpack.prod.config.js @@ -5,6 +5,7 @@ var Merge = require('webpack-merge'); var webpack = require('webpack'); var BundleTracker = require('webpack-bundle-tracker'); +var WebpackMd5Hash = require("webpack-md5-hash"); var _ = require('underscore'); var commonConfig = require('./webpack.common.config.js'); @@ -29,7 +30,8 @@ var optimizedConfig = Merge.smart(commonConfig, { name: 'commons', filename: 'commons.[chunkhash].js', minChunks: 3 - }) + }), + new WebpackMd5Hash() ] }});