Ghost/ghost/admin/ember-cli-build.js

199 lines
5.9 KiB
JavaScript
Raw Normal View History

/* eslint-env node */
'use strict';
const EmberApp = require('ember-cli/lib/broccoli/ember-app');
const concat = require('broccoli-concat');
const mergeTrees = require('broccoli-merge-trees');
const uglify = require('broccoli-uglify-sourcemap');
const CleanCSS = require('broccoli-clean-css');
const environment = EmberApp.env();
const isProduction = environment === 'production';
let assetLocation, codemirrorAssets;
assetLocation = function (fileName) {
if (isProduction) {
fileName = fileName.replace('.', '.min.');
}
return `/assets/${fileName}`;
};
codemirrorAssets = function () {
let codemirrorFiles = [
// 'lib/codemirror.css',
'theme/xq-light.css',
'lib/codemirror.js',
'mode/htmlmixed/htmlmixed.js',
'mode/xml/xml.js',
'mode/css/css.js',
'mode/javascript/javascript.js'
];
if (environment === 'test') {
return {import: codemirrorFiles};
}
let config = {};
config.public = {
include: codemirrorFiles,
destDir: '/',
processTree(tree) {
let jsTree = concat(tree, {
outputFile: 'assets/codemirror/codemirror.js',
headerFiles: ['lib/codemirror.js'],
inputFiles: ['mode/**/*'],
sourceMapConfig: {enabled: false}
});
let cssTree = concat(tree, {
outputFile: 'assets/codemirror/codemirror.css',
inputFiles: ['**/*.css']
});
if (isProduction) {
jsTree = uglify(jsTree);
cssTree = new CleanCSS(cssTree);
}
return mergeTrees([tree, jsTree, cssTree]);
}
};
// put the files in vendor ready for importing into the test-support file
if (environment === 'development') {
config.vendor = codemirrorFiles;
}
return config;
};
2017-02-17 22:46:41 +03:00
function postcssPlugins() {
let plugins = [{
2017-02-17 22:46:41 +03:00
module: require('postcss-easy-import')
}, {
module: require('postcss-custom-properties')
}, {
module: require('postcss-color-function')
}, {
module: require('autoprefixer'),
options: {
browsers: ['last 2 versions']
}
}];
if (isProduction) {
plugins.push({
module: require('cssnano'),
// cssnano minifies animations sometimes wrong, so they don't work anymore.
// See: https://github.com/ben-eb/gulp-cssnano/issues/33#issuecomment-210518957
options: {
reduceIdents: {
keyframes: false
},
discardUnused: {
keyframes: false
}
}
2017-02-17 22:46:41 +03:00
});
}
return plugins;
}
module.exports = function (defaults) {
let app = new EmberApp(defaults, {
2017-02-17 22:46:41 +03:00
'ember-cli-babel': {
optional: ['es6.spec.symbols'],
includePolyfill: true
},
'ember-composable-helpers': {
only: ['toggle']
},
outputPaths: {
app: {
🎨 remove usage of ghost's {{asset}} helper in index.html (#574) refs #8140 🎨 remove usage of ghost's {{asset}} helper in built index.html files requires https://github.com/TryGhost/Ghost/pull/8142 - switch to hash-location rather than history-location - remove usage of Ghost's `{{asset}}` helper in index.html - add `content-for` helpers to `asset-delivery` addon that switch asset urls in index.html to `.min` files in production - update the `asset-delivery` addon to copy the production `index.min.html` to `default-prod.hbs` so Ghost can serve production assets when in production mode - change template output path to `core/server/admin/views/` - enable asset fingerprinting - remove `ember-cli-sri` dependency - we weren't using it but now that ember is handling assets it was used automatically and could potentially create issues if users have proxy servers that attempt to compress or otherwise modify asset files ✨ redirect to setup if server says setup isn't finished refs https://github.com/TryGhost/Ghost/issues/8140 - now we're using hash-location the server no longer knows if we're hitting the /setup route so it's not able to redirect for us - extends the default ESA `UnauthenticatedRouteMixin` to add a check against the `/authentication/setup` API endpoint and redirects to `/#/setup/one` if setup isn't complete - this works for all routes because the default behaviour when hitting an authenticated route without the right credentials is to force a logout and redirect to `/#/signin` which utilises the `UnauthenticatedRouteMixin` deps: ember-cli-inject-live-reload@1.6.1
2017-03-14 19:04:46 +03:00
html: isProduction ? 'index.min.html' : 'index.html',
2017-02-17 22:46:41 +03:00
js: assetLocation('ghost.js'),
css: {
app: assetLocation('ghost.css'),
// TODO: find a way to use the .min file with the lazyLoader
'app-dark': 'assets/ghost-dark.css'
2017-02-17 22:46:41 +03:00
}
},
vendor: {
js: assetLocation('vendor.js'),
css: assetLocation('vendor.css')
}
},
2017-02-17 22:46:41 +03:00
postcssOptions: {
compile: {
enabled: true,
plugins: postcssPlugins()
}
},
fingerprint: {
enabled: true,
extensions: ['js', 'css', 'png', 'jpg', 'jpeg', 'gif', 'map']
},
minifyJS: {
options: {
output: {
semicolons: true
}
}
},
2016-06-29 11:25:51 +03:00
nodeAssets: {
'blueimp-md5': {
import: ['js/md5.js']
},
codemirror: codemirrorAssets(),
'jquery-deparam': {
import: ['jquery-deparam.js']
},
'mobiledoc-kit': {
import: ['dist/amd/mobiledoc-kit.js', 'dist/amd/mobiledoc-kit.map']
},
'password-generator': {
import: ['lib/password-generator.js']
},
simplemde: {
srcDir: 'debug',
import: ['simplemde.js', 'simplemde.css']
2016-06-29 11:25:51 +03:00
}
},
svg: {
paths: [
'public/assets/icons',
'lib/koenig-editor/public/icons'
],
optimize: {
plugins: [
{removeDimensions: true},
{removeTitle: true},
{removeXMLNS: true},
// Transforms on groups are necessary to work around Firefox
// not supporting transform-origin on line/path elements.
{convertPathData: {
applyTransforms: false
}},
{moveGroupAttrsToElems: false}
]
}
}
});
// 'dem Scripts
app.import('bower_components/validator-js/validator.js');
app.import('bower_components/rangyinputs/rangyinputs-jquery-src.js');
app.import('bower_components/keymaster/keymaster.js');
app.import('bower_components/devicejs/lib/device.js');
app.import('bower_components/google-caja/html-css-sanitizer-bundle.js');
// pull things we rely on via lazy-loading into the test-support.js file so
// that tests don't break when running via http://localhost:4200/tests
if (app.env === 'development') {
app.import('vendor/codemirror/lib/codemirror.js', {type: 'test'});
}
return app.toTree();
};