Gisle Aune
6 years ago
10 changed files with 110 additions and 123 deletions
-
1.gitignore
-
4Dockerfile
-
68build.js
-
15builder.js
-
31marko-config.js
-
2marko/page/layout.marko
-
11package-lock.json
-
2package.json
-
23routes/globalcss.js
-
74server.js
@ -1,4 +1,5 @@ |
|||||
*.marko.js |
*.marko.js |
||||
|
*.prebuild.json |
||||
/node_modules |
/node_modules |
||||
npm-debug.log |
npm-debug.log |
||||
/.cache |
/.cache |
||||
|
@ -1,53 +1,27 @@ |
|||||
const build = require("./builder") |
|
||||
|
const prebuild = require("@marko/prebuild"); |
||||
|
|
||||
// Setup global environment
|
|
||||
require("marko/node-require").install() |
|
||||
require("es6-promise").polyfill() |
|
||||
|
const config = require("./marko-config") |
||||
|
config.loadPrebuild = false |
||||
|
|
||||
// Configure lasso
|
|
||||
require("lasso").configure({ |
|
||||
plugins: [ |
|
||||
"lasso-marko", |
|
||||
"lasso-less", |
|
||||
], |
|
||||
outputDir: "./.static", |
|
||||
bundlingEnabled: true, |
|
||||
minify: true, |
|
||||
fingerprintsEnabled: true, |
|
||||
|
prebuild.run({ |
||||
|
config: config, |
||||
|
pages: [ // List of pages to prebuild.
|
||||
|
"./marko/page/story/list.marko", |
||||
|
"./marko/page/story/tag-list.marko", |
||||
|
"./marko/page/logs/list.marko", |
||||
|
"./marko/page/data/channels.marko", |
||||
|
"./marko/page/data/characters.marko", |
||||
|
"./marko/page/story-content/view.marko", |
||||
|
"./marko/page/logs-content/view.marko", |
||||
|
] |
||||
|
}).then(lassoPrebuildResult => { |
||||
|
const builds = lassoPrebuildResult._buildsByPath |
||||
|
|
||||
require: { |
|
||||
builtins: { |
|
||||
fs: require.resolve("empty-module"), |
|
||||
}, |
|
||||
|
for (const key in builds) { |
||||
|
if (!builds.hasOwnProperty(key)) { |
||||
|
continue |
||||
|
} |
||||
|
|
||||
transforms: [ |
|
||||
{ |
|
||||
transform: "lasso-babel-transform", |
|
||||
config: { |
|
||||
extensions: [".js", ".es6"], // Enabled file extensions. Default: [".js", ".es6"]
|
|
||||
babelOptions: { |
|
||||
presets: [ "es2015" ] |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
] |
|
||||
|
console.log("Built", key) |
||||
} |
} |
||||
}) |
}) |
||||
|
|
||||
// Render templates
|
|
||||
async function buildAll() { |
|
||||
await build("./marko/page/story/list.marko") |
|
||||
await build("./marko/page/story/tag-list.marko", {tags: []}) |
|
||||
await build("./marko/page/logs/list.marko") |
|
||||
await build("./marko/page/data/channels.marko", {channels: [], user: {}}) |
|
||||
await build("./marko/page/data/characters.marko", {characters: [], user: {}}) |
|
||||
await build("./marko/page/story-content/view.marko", {story: {chapters: []}}) |
|
||||
await build("./marko/page/logs-content/view.marko", {log: {posts: [], channel: {}}}) |
|
||||
} |
|
||||
|
|
||||
buildAll().then(() => { |
|
||||
console.log("Done!") |
|
||||
}).catch(err => { |
|
||||
console.error(err) |
|
||||
process.exit(1) |
|
||||
}) |
|
@ -1,15 +0,0 @@ |
|||||
module.exports = function build(path, data) { |
|
||||
console.log("Building", path) |
|
||||
|
|
||||
return new Promise((resolve, reject) => { |
|
||||
const render = require(path).render(data) |
|
||||
render.once("error", err => reject) |
|
||||
|
|
||||
const interval = setInterval(() => { |
|
||||
if (render._remaining === 0) { |
|
||||
clearInterval(interval) |
|
||||
resolve() |
|
||||
} |
|
||||
}, 500) |
|
||||
}) |
|
||||
} |
|
@ -0,0 +1,31 @@ |
|||||
|
const isProduction = process.env.NODE_ENV === "production" |
||||
|
|
||||
|
module.exports = { |
||||
|
plugins: [ |
||||
|
"lasso-marko", |
||||
|
"lasso-less", |
||||
|
], |
||||
|
outputDir: "./.static", // Place all generated JS/CSS/etc. files into the "static" dir
|
||||
|
bundlingEnabled: isProduction, // Only enable bundling in production
|
||||
|
minify: isProduction, // Only minify JS and CSS code in production
|
||||
|
fingerprintsEnabled: isProduction, // Only add fingerprints to URLs in production
|
||||
|
loadPrebuild: isProduction, // Only load prebuilt stuff in prod.
|
||||
|
|
||||
|
require: { |
||||
|
builtins: { |
||||
|
fs: require.resolve("empty-module"), |
||||
|
}, |
||||
|
|
||||
|
transforms: isProduction ? [ |
||||
|
{ |
||||
|
transform: "lasso-babel-transform", |
||||
|
config: { |
||||
|
extensions: [".js", ".es6"], // Enabled file extensions. Default: [".js", ".es6"]
|
||||
|
babelOptions: { |
||||
|
presets: [ "es2015" ] |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
] : null |
||||
|
} |
||||
|
} |
@ -0,0 +1,23 @@ |
|||||
|
const fs = require("fs") |
||||
|
const express = require("express") |
||||
|
const less = require("less") |
||||
|
|
||||
|
const router = express.Router() |
||||
|
|
||||
|
let lessData = "" |
||||
|
let data = "" |
||||
|
for (const name of fs.readdirSync("./marko/global/", "utf8")) { |
||||
|
data += fs.readFileSync("./marko/global/"+name, {encoding:"utf8"}) + "\n\n" |
||||
|
} |
||||
|
data = less.render(data, (err, output) => { |
||||
|
if (err == null) { |
||||
|
lessData = output.css |
||||
|
} |
||||
|
}) |
||||
|
|
||||
|
router.get("/", (req, res) => { |
||||
|
res.contentType("text/css").end(lessData) |
||||
|
}) |
||||
|
|
||||
|
|
||||
|
module.exports = router |
Write
Preview
Loading…
Cancel
Save
Reference in new issue