Page Menu
Home
DevCentral
Search
Configure Global Search
Log In
Files
F25451595
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
14 KB
Referenced Files
None
Subscribers
None
View Options
diff --git a/components/gulpfile.js b/components/gulpfile.js
index fd9e51b..d0351af 100644
--- a/components/gulpfile.js
+++ b/components/gulpfile.js
@@ -1,177 +1,207 @@
'use strict';
import plugins from 'gulp-load-plugins';
import yargs from 'yargs';
import browser from 'browser-sync';
import gulp from 'gulp';
import panini from 'panini';
import { rimraf } from 'rimraf';
import yaml from 'js-yaml';
import fs from 'fs';
import webpackStream from 'webpack-stream';
import webpack2 from 'webpack';
import named from 'vinyl-named';
import uncss from 'uncss';
import autoprefixer from 'autoprefixer';
import imagemin from 'gulp-imagemin';
import { gifsicle, mozjpeg, optipng, svgo } from 'gulp-imagemin';
-
import * as dartSass from 'sass';
import gulpSass from 'gulp-sass';
+
const sass = gulpSass(dartSass);
+const localtunnel = require('localtunnel');
// Load all Gulp plugins into one variable
const $ = plugins();
// Check for --production flag
const PRODUCTION = !!(yargs.argv.production);
// Load settings from config.yml
const config = loadConfig();
function loadConfig() {
const unsafe = require('js-yaml-js-types').all;
const schema = yaml.DEFAULT_SCHEMA.extend(unsafe);
let ymlFile = fs.readFileSync('config.yml', 'utf8');
return yaml.load(ymlFile, { schema });
}
// Build the "dist" folder by running all of the below tasks
// Sass must be run later so UnCSS can search for used classes in the others assets.
gulp.task('build',
gulp.series(clean, gulp.parallel(pages, javascript, images, copy), compileSass));
// Build the site, run the server, and watch for file changes
gulp.task('default',
gulp.series('build', server, watch));
// Delete the "dist" folder
// This happens every time a build starts
function clean(done) {
rimraf.rimrafSync(config.paths.dist);
done();
}
// Copy files out of the assets folder
// This task skips over the "img", "js", and "scss" folders, which are parsed separately
function copy() {
return gulp.src(config.paths.assets)
.pipe(gulp.dest(config.paths.dist + '/assets'));
}
// Copy page templates into finished HTML files
function pages() {
return gulp.src('src/pages/**/*.{html,hbs,handlebars}')
.pipe(panini({
root: 'src/pages/',
layouts: 'src/layouts/',
partials: 'src/partials/',
data: 'src/data/',
helpers: 'src/helpers/'
}))
.pipe(gulp.dest(config.paths.dist));
}
// Load updated HTML templates and partials into Panini
function resetPages(done) {
panini.refresh();
done();
}
// Compile Sass into CSS
// In production, the CSS is compressed
function compileSass() {
const postCssPlugins = [
autoprefixer(),
PRODUCTION && uncss.postcssPlugin(config.tasks.uncss),
].filter(Boolean);
return gulp.src('src/assets/scss/app.scss')
.pipe($.sourcemaps.init())
.pipe(sass({
includePaths: config.paths.sass
})
.on('error', sass.logError))
.pipe($.postcss(postCssPlugins))
.pipe($.if(PRODUCTION, $.cleanCss({ compatibility: 'ie9' })))
.pipe($.if(!PRODUCTION, $.sourcemaps.write()))
.pipe(gulp.dest(config.paths.dist + '/assets/css'))
.pipe(browser.reload({ stream: true }));
}
let webpackConfig = {
mode: (PRODUCTION ? 'production' : 'development'),
module: {
rules: [
{
test: /\.js$/,
use: {
loader: 'babel-loader',
options: {
presets: [ "@babel/preset-env" ],
compact: false
}
}
}
]
},
devtool: !PRODUCTION && 'source-map'
}
// Combine JavaScript into one file
// In production, the file is minified
function javascript() {
return gulp.src(config.paths.entries)
.pipe(named())
.pipe($.sourcemaps.init())
.pipe(webpackStream(webpackConfig, webpack2))
.pipe($.if(PRODUCTION, $.uglify()
.on('error', e => { console.log(e); })
))
.pipe($.if(!PRODUCTION, $.sourcemaps.write()))
.pipe(gulp.dest(config.paths.dist + '/assets/js'));
}
// Copy images to the "dist" folder
// In production, the images are compressed
function images() {
return gulp.src('src/assets/img/**/*')
.pipe($.if(PRODUCTION, imagemin([
gifsicle({interlaced: true}),
mozjpeg({quality: 85, progressive: true}),
optipng({optimizationLevel: 5}),
svgo({
plugins: [
{removeViewBox: true},
{cleanupIDs: false}
]
})
])))
.pipe(gulp.dest(config.paths.dist + '/assets/img'));
}
-// Start a server with BrowserSync to preview the site in
+// Start a server with BrowserSync to preview the site
function server(done) {
browser.init({
- server: config.paths.dist, port: config.dev.port
- }, done);
+ server: config.paths.dist,
+ port: config.dev.port,
+ });
+
+ if (tunnel in config.dev && config.dev.tunnel.enabled) {
+ setupTunnel().then(() => {
+ done();
+ });
+ } else {
+ done();
+ }
}
// Reload the browser with BrowserSync
function reload(done) {
browser.reload();
done();
}
// Watch for changes to static assets, pages, Sass, and JavaScript
function watch() {
gulp.watch(config.paths.assets, copy);
gulp.watch('src/pages/**/*.html').on('all', gulp.series(pages, browser.reload));
gulp.watch('src/{layouts,partials}/**/*.html').on('all', gulp.series(resetPages, pages, browser.reload));
gulp.watch('src/data/**/*.{js,json,yml}').on('all', gulp.series(resetPages, pages, browser.reload));
gulp.watch('src/helpers/**/*.js').on('all', gulp.series(resetPages, pages, browser.reload));
gulp.watch('src/assets/scss/**/*.scss').on('all', compileSass);
gulp.watch('src/assets/js/**/*.js').on('all', gulp.series(javascript, browser.reload));
gulp.watch('src/assets/img/**/*').on('all', gulp.series(images, browser.reload));
}
+
+async function setupTunnel() {
+ try {
+ const tunnelOptions = { port: config.dev.port };
+
+ if (subdomain in config.dev.tunnel) {
+ tunnelOptions.subdomain = config.dev.tunnel.subdomain;
+ }
+ const tunnel = await localtunnel(tunnelOptions);
+
+ console.log('Tunnel URL:', tunnel.url);
+
+ tunnel.on('close', () => {
+ console.log('Localtunnel closed');
+ });
+ } catch (err) {
+ console.error('Localtunnel setup failed:', err);
+ throw err;
+ }
+}
diff --git a/components/package-template.json b/components/package-template.json
index b24e9fa..644258c 100644
--- a/components/package-template.json
+++ b/components/package-template.json
@@ -1,50 +1,51 @@
{
"main": "gulpfile.babel.js",
"scripts": {
"start": "gulp",
"build": "gulp build --production"
},
"dependencies": {
"foundation-sites": "^6.9.0",
"jquery": "^3.6.0",
"motion-ui": "^2.0.4",
"what-input": "^5.2.12"
},
"devDependencies": {
"@babel/core": "^7.26.0",
"@babel/preset-env": "^7.26.0",
"@babel/register": "^7.25.9",
"autoprefixer": "^10.4.20",
"babel-loader": "^9.2.1",
"browser-sync": "^3.0.3",
"gulp": "^5.0.0",
"gulp-babel": "^8.0.0",
"gulp-clean-css": "^4.3.0",
"gulp-cli": "^3.0.0",
"gulp-concat": "^2.6.1",
"gulp-extname": "^0.2.2",
"gulp-if": "^3.0.0",
"gulp-imagemin": "^7.1.0",
"gulp-load-plugins": "^2.0.8",
"gulp-postcss": "^10.0.0",
"gulp-sass": "^5.1.0",
"gulp-sourcemaps": "^3.0.0",
"gulp-uglify": "^3.0.2",
"js-yaml": "^4.1.0",
"js-yaml-js-types": "^1.0.1",
+ "localtunnel":"^2.0.2",
"panini": "^1.7.2",
"postcss": "^8.4.49",
"rimraf": "^6.0.1",
"sass": "^1.80.7",
"style-sherpa": "^1.0.2",
"uncss": "^0.17.3",
"vinyl-named": "^1.1.0",
"webpack": "^5.96.1",
"webpack-stream": "^7.0.0",
"yargs": "^17.7.2"
},
"bugs": {
"url": "https://devcentral.nasqueron.org/"
},
"private": true
}
diff --git a/config.yml b/config.yml
index 457b6d1..fec09e3 100644
--- a/config.yml
+++ b/config.yml
@@ -1,63 +1,66 @@
# -------------------------------------------------------------
# Static website configuration
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Project: Nasqueron
# Site: Upsection testing site
# -------------------------------------------------------------
# -------------------------------------------------------------
# Metadata to generate package.json
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
package:
name: nasqueron-upsection-test
version: 0.1.0
description: Allow to test if we can build a static site
repository_name: upsection
# -------------------------------------------------------------
# Configuration for Gulp build tasks
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
paths:
dist: "dist"
# Paths to static assets that aren't images, CSS, or JavaScript
assets:
- "src/assets/**/*"
- "!src/assets/{img,js,scss}{,/**/*}"
# Paths to Sass libraries, which can then be loaded with @import
sass:
- "node_modules/foundation-sites/scss"
- "node_modules/motion-ui/src"
# Paths to JavaScript entry points for webpack to bundle modules
entries:
- "src/assets/js/app.js"
tasks:
# Make sure CSS is compatible with browsers guards prefixes like -moz-
autoprefixer:
browsers:
- last 2 versions
- ie >= 9
- ios >= 12
- android >= 7.0
# Remove unused CSS declarations
uncss:
html:
- "src/**/*.html"
ignore:
- "!!js/regexp .foundation-mq"
- '!!js/regexp ^\.is-.*'
# -------------------------------------------------------------
# Configuration for development server
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
dev:
port: 8000
+ tunnel:
+ enabled: true
+ subdomain: "upsection"
diff --git a/package.json b/package.json
index b90c608..e13f2db 100644
--- a/package.json
+++ b/package.json
@@ -1,57 +1,58 @@
{
"main": "gulpfile.babel.js",
"scripts": {
"start": "gulp",
"build": "gulp build --production"
},
"dependencies": {
"foundation-sites": "^6.9.0",
"jquery": "^3.6.0",
"motion-ui": "^2.0.4",
"what-input": "^5.2.12"
},
"devDependencies": {
"@babel/core": "^7.26.0",
"@babel/preset-env": "^7.26.0",
"@babel/register": "^7.25.9",
"autoprefixer": "^10.4.20",
"babel-loader": "^9.2.1",
"browser-sync": "^3.0.3",
"gulp": "^5.0.0",
"gulp-babel": "^8.0.0",
"gulp-clean-css": "^4.3.0",
"gulp-cli": "^3.0.0",
"gulp-concat": "^2.6.1",
"gulp-extname": "^0.2.2",
"gulp-if": "^3.0.0",
"gulp-imagemin": "^7.1.0",
"gulp-load-plugins": "^2.0.8",
"gulp-postcss": "^10.0.0",
"gulp-sass": "^5.1.0",
"gulp-sourcemaps": "^3.0.0",
"gulp-uglify": "^3.0.2",
"js-yaml": "^4.1.0",
"js-yaml-js-types": "^1.0.1",
+ "localtunnel":"^2.0.2",
"panini": "^1.7.2",
"postcss": "^8.4.49",
"rimraf": "^6.0.1",
"sass": "^1.80.7",
"style-sherpa": "^1.0.2",
"uncss": "^0.17.3",
"vinyl-named": "^1.1.0",
"webpack": "^5.96.1",
"webpack-stream": "^7.0.0",
"yargs": "^17.7.2"
},
"bugs": {
"url": "https://devcentral.nasqueron.org/"
},
"private": true,
"name": "nasqueron-upsection-test",
"version": "0.1.0",
"description": "Allow to test if we can build a static site",
"repository": {
"type": "git",
"url": "https://devcentral.nasqueron.org/source/upsection.git"
}
}
diff --git a/template/config.yml.in b/template/config.yml.in
index 7c82767..dc7f54f 100644
--- a/template/config.yml.in
+++ b/template/config.yml.in
@@ -1,63 +1,66 @@
# -------------------------------------------------------------
# Static website configuration
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Project: Nasqueron
# Site: https://%%SUBDOMAIN%%.nasqueron.org
# -------------------------------------------------------------
# -------------------------------------------------------------
# Metadata to generate package.json
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
package:
name: nasqueron-%%SUBDOMAIN%%-www
version: 0.1.0
description: Build %%SUBDOMAIN%% site
repository_name: %%SUBDOMAIN%%-www
# -------------------------------------------------------------
# Configuration for Gulp build tasks
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
paths:
dist: "dist"
# Paths to static assets that aren't images, CSS, or JavaScript
assets:
- "src/assets/**/*"
- "!src/assets/{img,js,scss}{,/**/*}"
# Paths to Sass libraries, which can then be loaded with @import
sass:
- "node_modules/foundation-sites/scss"
- "node_modules/motion-ui/src"
# Paths to JavaScript entry points for webpack to bundle modules
entries:
- "src/assets/js/app.js"
tasks:
# Make sure CSS is compatible with browsers guards prefixes like -moz-
autoprefixer:
browsers:
- last 2 versions
- ie >= 9
- ios >= 12
- android >= 7.0
# Remove unused CSS declarations
uncss:
html:
- "src/**/*.html"
ignore:
- "!!js/regexp .foundation-mq"
- '!!js/regexp ^\.is-.*'
# -------------------------------------------------------------
# Configuration for development server
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
dev:
port: 8000
+ tunnel:
+ enabled: true
+ subdomain: %%SUBDOMAIN%%
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Thu, Apr 16, 05:24 (1 d, 8 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3608966
Default Alt Text
(14 KB)
Attached To
Mode
rUPSECTION Upsection
Attached
Detach File
Event Timeline
Log In to Comment