Update to generate front-end constants on server startup

To avoid extra webpacking on changing configs and follow the 12 factor app
This commit is contained in:
Wu Cheng-Han 2017-03-20 01:39:09 +08:00
parent b07eeed0c5
commit 448b006194
5 changed files with 34 additions and 12 deletions

16
app.js
View file

@ -29,6 +29,22 @@ var auth = require('./lib/auth.js')
var response = require('./lib/response.js') var response = require('./lib/response.js')
var models = require('./lib/models') var models = require('./lib/models')
// generate front-end constants by template
var constpath = path.join(__dirname, './public/js/lib/common/constant.ejs')
var data = {
domain: config.domain,
urlpath: config.urlpath,
debug: config.debug,
version: config.version,
GOOGLE_API_KEY: config.google && config.google.GOOGLE_API_KEY,
GOOGLE_CLIENT_ID: config.google && config.google.GOOGLE_CLIENT_ID,
DROPBOX_APP_KEY: config.dropbox && config.google.DROPBOX_APP_KEY
}
ejs.renderFile(constpath, data, {}, function (err, str) {
if (err) throw new Error(err)
fs.writeFileSync(path.join(__dirname, './public/build/constant.js'), str)
})
// server setup // server setup
var app = express() var app = express()
var server = null var server = null

View file

@ -173,8 +173,9 @@ module.exports = {
version: version, version: version,
minimumCompatibleVersion: minimumCompatibleVersion, minimumCompatibleVersion: minimumCompatibleVersion,
maintenance: maintenance, maintenance: maintenance,
debug: debug, domain: domain,
urlpath: urlpath, urlpath: urlpath,
debug: debug,
port: port, port: port,
alloworigin: alloworigin, alloworigin: alloworigin,
usessl: usessl, usessl: usessl,

View file

@ -0,0 +1,8 @@
window.domain = '<%- domain %>'
window.urlpath = '<%- urlpath %>'
window.debug = <%- debug %>
window.version = '<%- version %>'
window.GOOGLE_API_KEY = '<%- GOOGLE_API_KEY %>'
window.GOOGLE_CLIENT_ID = '<%- GOOGLE_CLIENT_ID %>'
window.DROPBOX_APP_KEY = '<%- DROPBOX_APP_KEY %>'

View file

@ -1,14 +1,10 @@
import configJson from '../../../../config.json' // root path json config export const GOOGLE_API_KEY = window.GOOGLE_API_KEY || ''
export const GOOGLE_CLIENT_ID = window.GOOGLE_CLIENT_ID || ''
export const DROPBOX_APP_KEY = window.DROPBOX_APP_KEY || ''
const config = process.env.NODE_ENV === 'production' ? configJson.production : configJson.development export const domain = window.domain || '' // domain name
export const urlpath = window.urlpath || '' // sub url path, like: www.example.com/<urlpath>
export const GOOGLE_API_KEY = (config.google && config.google.apiKey) || '' export const debug = window.debug || false
export const GOOGLE_CLIENT_ID = (config.google && config.google.clientID) || ''
export const DROPBOX_APP_KEY = (config.dropbox && config.dropbox.appKey) || ''
export const domain = config.domain || '' // domain name
export const urlpath = config.urlpath || '' // sub url path, like: www.example.com/<urlpath>
export const debug = config.debug || false
export const port = window.location.port export const port = window.location.port
export const serverurl = `${window.location.protocol}//${domain || window.location.hostname}${port ? ':' + port : ''}${urlpath ? '/' + urlpath : ''}` export const serverurl = `${window.location.protocol}//${domain || window.location.hostname}${port ? ':' + port : ''}${urlpath ? '/' + urlpath : ''}`
@ -16,4 +12,4 @@ window.serverurl = serverurl
export const noteid = urlpath ? window.location.pathname.slice(urlpath.length + 1, window.location.pathname.length).split('/')[1] : window.location.pathname.split('/')[1] export const noteid = urlpath ? window.location.pathname.slice(urlpath.length + 1, window.location.pathname.length).split('/')[1] : window.location.pathname.split('/')[1]
export const noteurl = `${serverurl}/${noteid}` export const noteurl = `${serverurl}/${noteid}`
export const version = '0.5.0' export const version = window.version

View file

@ -1,3 +1,4 @@
<script src="<%= webpackConfig.output.baseUrl %>/build/constant.js"></script>
<% for (var chunk in htmlWebpackPlugin.files.chunks) { %> <% for (var chunk in htmlWebpackPlugin.files.chunks) { %>
<script src="<%= webpackConfig.output.baseUrl %><%= htmlWebpackPlugin.files.chunks[chunk].entry %>" defer></script> <script src="<%= webpackConfig.output.baseUrl %><%= htmlWebpackPlugin.files.chunks[chunk].entry %>" defer></script>
<% } %> <% } %>