Page MenuHomeDevCentral

No OneTemporary

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

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)

Event Timeline