mirror of https://github.com/zulip/zulip.git
Add webpack build process.
This commit is contained in:
parent
e20a1bc73c
commit
85809e6140
|
@ -29,6 +29,7 @@ manage.log
|
|||
event_queues.json
|
||||
.vagrant
|
||||
/zproject/dev-secrets.conf
|
||||
static/js/bundle.js
|
||||
static/third/gemoji/
|
||||
static/third/zxcvbn/
|
||||
tools/emoji_dump/bitmaps/
|
||||
|
|
|
@ -12,7 +12,9 @@
|
|||
"xmlhttprequest": "1.5.0",
|
||||
"nwmatcher": "1.3.6",
|
||||
"htmlparser2": "3.8.3",
|
||||
"cssstyle": "0.2.29"
|
||||
"cssstyle": "0.2.29",
|
||||
"webpack": "1.12.2",
|
||||
"webpack-dev-server": "1.12.1"
|
||||
},
|
||||
"scripts": {},
|
||||
"repository": {
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
// commonjs code goes here
|
|
@ -39,6 +39,10 @@ var page_params = {{ page_params }};
|
|||
{% endif %}
|
||||
{% minified_js 'app' %}
|
||||
|
||||
{% if not pipeline %}
|
||||
<script type="text/javascript" src="/webpack/bundle.js"></script>
|
||||
{% endif %}
|
||||
|
||||
{% if debug %}
|
||||
{% minified_js 'app_debug' %}
|
||||
{% endif %}
|
||||
|
|
|
@ -28,6 +28,9 @@ STATIC_PATH = 'static/'
|
|||
# Compile Handlebars templates
|
||||
subprocess.check_call(['tools/compile-handlebars-templates'])
|
||||
|
||||
# Create webpack bundle
|
||||
subprocess.check_call(['tools/webpack'])
|
||||
|
||||
def get_changed_source_files(other_checkout):
|
||||
""" Get list of changed static files since other_checkout.
|
||||
If git fails to return a reasonable looking list, this returns None,
|
||||
|
@ -69,9 +72,10 @@ if prev_deploy:
|
|||
if changed_files is None:
|
||||
prev_deploy = None
|
||||
|
||||
# Always use the newly compiled handlebars templates.
|
||||
# Always use the newly compiled handlebars templates and webpack bundle.
|
||||
if prev_deploy:
|
||||
changed_files.add(os.path.join(STATIC_PATH, 'templates/compiled.js'))
|
||||
changed_files.add(os.path.join(STATIC_PATH, 'js/bundle.js'))
|
||||
|
||||
JS_SPECS = settings.JS_SPECS
|
||||
CLOSURE_BINARY = '/usr/bin/closure-compiler'
|
||||
|
|
|
@ -62,6 +62,7 @@ sys.path.append(os.path.join(os.path.dirname(__file__), '..'))
|
|||
proxy_port = base_port
|
||||
django_port = base_port+1
|
||||
tornado_port = base_port+2
|
||||
webpack_port = base_port+3
|
||||
|
||||
os.chdir(os.path.join(os.path.dirname(__file__), '..'))
|
||||
|
||||
|
@ -75,6 +76,7 @@ os.setpgrp()
|
|||
# Pass --nostatic because we configure static serving ourselves in
|
||||
# zulip/urls.py.
|
||||
cmds = [['./tools/compile-handlebars-templates', 'forever'],
|
||||
['./tools/webpack', 'watch'],
|
||||
['python', 'manage.py', 'runserver', '--nostatic'] +
|
||||
manage_args + ['localhost:%d' % (django_port,)],
|
||||
['python', 'manage.py', 'runtornado'] +
|
||||
|
@ -98,6 +100,10 @@ class Resource(resource.Resource):
|
|||
request.uri.startswith('/sockjs')):
|
||||
return proxy.ReverseProxyResource('localhost', tornado_port, '/'+name)
|
||||
|
||||
elif (request.uri.startswith('/webpack') or
|
||||
request.uri.startswith('/socket.io')):
|
||||
return proxy.ReverseProxyResource('localhost', webpack_port, '/'+name)
|
||||
|
||||
return proxy.ReverseProxyResource('localhost', django_port, '/'+name)
|
||||
|
||||
try:
|
||||
|
|
|
@ -0,0 +1,30 @@
|
|||
#!/usr/bin/env python
|
||||
from __future__ import absolute_import
|
||||
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..'))
|
||||
os.environ['DJANGO_SETTINGS_MODULE'] = 'zproject.settings'
|
||||
from django.conf import settings
|
||||
|
||||
os.chdir(settings.DEPLOY_ROOT)
|
||||
STATIC_PATH = 'static/'
|
||||
|
||||
def run():
|
||||
# write the file to disk
|
||||
subprocess.check_call(['tools/node', 'node_modules/.bin/webpack'] +
|
||||
['--config', 'webpack.production.config.js'])
|
||||
|
||||
def run_watch():
|
||||
# watch and rebuild on changes, serve file from memory via webpack-dev-server
|
||||
subprocess.Popen(['tools/node', 'node_modules/.bin/webpack-dev-server'] +
|
||||
['--config', 'webpack.config.js', '--watch-poll'])
|
||||
|
||||
if __name__ == '__main__':
|
||||
if len(sys.argv) == 2 and sys.argv[1] == 'watch':
|
||||
run_watch()
|
||||
else:
|
||||
run()
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
module.exports = {
|
||||
entry: [
|
||||
'webpack-dev-server/client?http://localhost:9991/socket.io',
|
||||
'./static/js/src/main.js'
|
||||
],
|
||||
devtool: 'eval',
|
||||
output: {
|
||||
publicPath: 'http://localhost:9991/webpack/',
|
||||
path: './static/js',
|
||||
filename: 'bundle.js'
|
||||
},
|
||||
devServer: {
|
||||
port: 9994,
|
||||
watchOptions: {
|
||||
aggregateTimeout: 300,
|
||||
poll: 1000
|
||||
}
|
||||
}
|
||||
};
|
|
@ -0,0 +1,7 @@
|
|||
module.exports = {
|
||||
entry: './static/js/src/main.js',
|
||||
output: {
|
||||
path: './static/js',
|
||||
filename: 'bundle.js'
|
||||
}
|
||||
};
|
|
@ -962,6 +962,7 @@ def home(request):
|
|||
'avatar_url': avatar_url(user_profile),
|
||||
'show_debug':
|
||||
settings.DEBUG and ('show_debug' in request.GET),
|
||||
'pipeline': settings.PIPELINE,
|
||||
'show_invites': show_invites,
|
||||
'is_admin': user_profile.is_admin(),
|
||||
'show_webathena': user_profile.realm.domain == "mit.edu",
|
||||
|
|
|
@ -704,6 +704,7 @@ JS_SPECS = {
|
|||
'js/referral.js',
|
||||
'js/custom_markdown.js',
|
||||
'js/bot_data.js',
|
||||
# JS bundled by webpack is also included here if PIPELINE setting is true
|
||||
],
|
||||
'output_filename': 'min/app.js'
|
||||
},
|
||||
|
@ -720,6 +721,9 @@ JS_SPECS = {
|
|||
},
|
||||
}
|
||||
|
||||
if PIPELINE:
|
||||
JS_SPECS['app']['source_filenames'].append('js/bundle.js')
|
||||
|
||||
app_srcs = JS_SPECS['app']['source_filenames']
|
||||
|
||||
PIPELINE_JS = {} # Now handled in tools/minify-js
|
||||
|
|
Loading…
Reference in New Issue