From 45a5e7853f8d902f462872df0dab498d46118b89 Mon Sep 17 00:00:00 2001 From: Eric Fischer <efischer@edx.org> Date: Tue, 26 Sep 2017 17:03:11 -0400 Subject: [PATCH] Correctly install and load webpacked studio-frontend --- cms/templates/asset_index.html | 6 +---- package.json | 12 ++++++++- pavelib/assets.py | 4 --- webpack.config.js | 47 ++++++++++++++++++++++++++++++++++ 4 files changed, 59 insertions(+), 10 deletions(-) diff --git a/cms/templates/asset_index.html b/cms/templates/asset_index.html index 9634501eaa4..65d75daaa92 100644 --- a/cms/templates/asset_index.html +++ b/cms/templates/asset_index.html @@ -13,16 +13,11 @@ <%namespace name='static' file='static_content.html'/> <%block name="header_extras"> -% if waffle_flag_enabled: - <link rel="stylesheet" type="text/css" href="${static.url('common/css/vendor/studio-frontend.min.css')}" /> - <script type="text/javascript" src="${static.url('common/js/vendor/assets.min.js')}" defer></script> -% else: % for template_name in ["asset"]: <script type="text/template" id="${template_name}-tpl"> <%static:include path="js/${template_name}.underscore" /> </script> % endfor -% endif </%block> % if not waffle_flag_enabled: @@ -62,6 +57,7 @@ <div class="content-primary"> % if waffle_flag_enabled: <div id="root"></div> + <%static:webpack entry="AssetsPage"></%static:webpack> % else: <div class="wrapper-assets"></div> % endif diff --git a/package.json b/package.json index a0a12a82835..0c01aa58193 100644 --- a/package.json +++ b/package.json @@ -4,17 +4,24 @@ "dependencies": { "babel-core": "^6.23.0", "babel-loader": "^6.4.0", + "babel-plugin-transform-class-properties": "^6.24.1", + "babel-plugin-transform-object-rest-spread": "^6.26.0", "babel-preset-env": "^1.2.1", "babel-preset-react": "^6.24.1", "backbone": "~1.3.2", "backbone.paginator": "~2.0.3", "coffee-loader": "^0.7.3", "coffee-script": "1.6.1", - "@edx/studio-frontend": "0.1.0", + "css-loader": "^0.28.5", "@edx/edx-bootstrap": "0.3.4", + "@edx/paragon": "0.1.0", + "@edx/studio-frontend": "0.2.0", "edx-pattern-library": "0.18.1", "edx-ui-toolkit": "1.5.2", "exports-loader": "^0.6.4", + "extract-text-webpack-plugin": "^2.1.2", + "file-loader": "^1.1.4", + "font-awesome": "^4.7.0", "hls.js": "0.7.2", "imports-loader": "^0.7.1", "jquery": "~2.2.0", @@ -22,6 +29,7 @@ "jquery.scrollto": "~2.1.2", "moment": "2.18.1", "moment-timezone": "~0.5.5", + "node-sass": "^4.5.3", "picturefill": "~3.0.2", "popper.js": "~1.12.5", "prop-types": "^15.5.10", @@ -30,6 +38,8 @@ "react-dom": "^15.5.4", "requirejs": "~2.3.2", "rtlcss": "^2.2.0", + "sass-loader": "^6.0.6", + "style-loader": "^0.18.2", "string-replace-webpack-plugin": "^0.1.3", "uglify-js": "2.7.0", "underscore": "~1.8.3", diff --git a/pavelib/assets.py b/pavelib/assets.py index 1ddf112683e..48eec72201a 100644 --- a/pavelib/assets.py +++ b/pavelib/assets.py @@ -64,10 +64,6 @@ NPM_INSTALLED_LIBRARIES = [ 'requirejs/require.js', 'underscore.string/dist/underscore.string.js', 'underscore/underscore.js', - '@edx/studio-frontend/dist/assets.min.js', - '@edx/studio-frontend/dist/assets.min.js.map', - '@edx/studio-frontend/dist/studio-frontend.min.css', - '@edx/studio-frontend/dist/studio-frontend.min.css.map', 'which-country/index.js' ] diff --git a/webpack.config.js b/webpack.config.js index afd6ce26f67..55a5d7bd799 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -5,9 +5,14 @@ var path = require('path'); var webpack = require('webpack'); var BundleTracker = require('webpack-bundle-tracker'); +var ExtractTextPlugin = require('extract-text-webpack-plugin'); var StringReplace = require('string-replace-webpack-plugin'); var isProd = process.env.NODE_ENV === 'production'; +var extractSass = new ExtractTextPlugin({ + filename: 'css/[name].[contenthash].css', + disable: !isProd +}); var namespacedRequireFiles = [ path.resolve(__dirname, 'common/static/common/js/components/views/feedback_notification.js'), @@ -19,6 +24,7 @@ var wpconfig = { entry: { // Studio + AssetsPage: './node_modules/@edx/studio-frontend/src/index.jsx', Import: './cms/static/js/features/import/factories/import.js', StudioIndex: './cms/static/js/features_jsx/studio/index.jsx', @@ -43,6 +49,7 @@ var wpconfig = { devtool: isProd ? false : 'source-map', plugins: [ + new ExtractTextPlugin('node_modules/@edx/studio-frontend/dist/studio-frontend.min.css'), new webpack.NoEmitOnErrorsPlugin(), new webpack.NamedModulesPlugin(), new webpack.DefinePlugin({ @@ -110,6 +117,42 @@ var wpconfig = { ], use: 'babel-loader' }, + { + test: /\.(js|jsx)$/, + include: [ + /studio-frontend/, + /paragon/ + ], + use: 'babel-loader' + }, + { + test: /(.scss|.css)$/, + include: [ + /studio-frontend/, + /paragon/, + /font-awesome/ + ], + use: extractSass.extract({ + use: [{ + loader: 'css-loader', + options: { + modules: true, + localIdentName: '[name]__[local]___[hash:base64:5]' + } + }, { + loader: 'sass-loader', + options: { + data: '$base-rem-size: 0.625; @import "paragon-reset";', + includePaths: [ + path.join(__dirname, './node_modules/@edx/paragon/src/utils'), + path.join(__dirname, './node_modules/') + ], + sourceMap: true + } + }], + fallback: 'style-loader' + }) + }, { test: /\.coffee$/, exclude: /node_modules/, @@ -130,6 +173,10 @@ var wpconfig = { 'exports-loader?this.AjaxPrefix!../../../../common/static/coffee/src/ajax_prefix.coffee' } } + }, + { + test: /\.(woff2?|ttf|svg|eot)(\?v=\d+\.\d+\.\d+)?$/, + loader: 'file-loader' } ] }, -- GitLab