initial changes for web packaging

This commit is contained in:
dkanada 2020-03-16 23:30:14 +09:00
parent f26e9dcf89
commit e77b718dd2
4 changed files with 37 additions and 29 deletions

View file

@ -13,8 +13,8 @@ pr:
- '*' - '*'
jobs: jobs:
- job: main_build - job: build
displayName: 'Main Build' displayName: 'Build'
dependsOn: lint dependsOn: lint
condition: succeeded() condition: succeeded()
@ -22,6 +22,14 @@ jobs:
pool: pool:
vmImage: 'ubuntu-latest' vmImage: 'ubuntu-latest'
strategy:
matrix:
bundle:
BuildConfiguration: Bundle
standalone:
BuildConfiguration: Standalone
maxParallel: 2
steps: steps:
- task: NodeTool@0 - task: NodeTool@0
displayName: 'Install Node' displayName: 'Install Node'
@ -65,6 +73,5 @@ jobs:
- script: 'yarn run lint' - script: 'yarn run lint'
displayName: 'Run ESLint' displayName: 'Run ESLint'
- script: | - script: 'yarn run stylelint'
yarn run stylelint displayName: 'Run Stylelint'
displayName: 'Run stylelint'

View file

@ -1,5 +1,5 @@
env: env:
es6: false es6: true
browser: true browser: true
amd: true amd: true

View file

@ -10,11 +10,11 @@ const htmlmin = require('gulp-htmlmin');
const imagemin = require('gulp-imagemin'); const imagemin = require('gulp-imagemin');
const sourcemaps = require('gulp-sourcemaps'); const sourcemaps = require('gulp-sourcemaps');
const mode = require('gulp-mode')({ const mode = require('gulp-mode')({
modes: ["production", "development"], modes: ["development", "bundle", "standalone"],
default: "development", default: "development",
verbose: false verbose: false
}); });
const webpack_stream = require('webpack-stream'); const stream = require('webpack-stream');
const inject = require('gulp-inject'); const inject = require('gulp-inject');
const postcss = require('gulp-postcss'); const postcss = require('gulp-postcss');
const sass = require('gulp-sass'); const sass = require('gulp-sass');
@ -22,10 +22,10 @@ const sass = require('gulp-sass');
sass.compiler = require('node-sass') sass.compiler = require('node-sass')
if (mode.production()) { if (mode.bundle() || mode.standalone()) {
var webpack_config = require('./webpack.prod.js'); var config = require('./webpack.prod.js');
} else { } else {
var webpack_config = require('./webpack.dev.js'); var config = require('./webpack.dev.js');
} }
function serve() { function serve() {
@ -43,23 +43,22 @@ function serve() {
watch(['src/**/*.png', 'src/**/*.jpg', 'src/**/*.gif', 'src/**/*.svg'], images); watch(['src/**/*.png', 'src/**/*.jpg', 'src/**/*.gif', 'src/**/*.svg'], images);
watch(['src/**/*.json', 'src/**/*.ico'], copy); watch(['src/**/*.json', 'src/**/*.ico'], copy);
watch('src/index.html', injectBundle); watch('src/index.html', injectBundle);
watch(['src/standalone.js', 'src/scripts/apploader.js'], setStandalone); watch(['src/standalone.js', 'src/scripts/apploader.js'], standalone);
} }
function setStandalone() { function standalone() {
return src(['src/standalone.js', 'src/scripts/apploader.js'], {base: './src/'}) return src(['src/standalone.js', 'src/scripts/apploader.js'], { base: './src/' })
.pipe(concat('scripts/apploader.js')) .pipe(concat('scripts/apploader.js'))
.pipe(dest('dist/')); .pipe(dest('dist/'));
} }
// Clean assets
function clean() { function clean() {
return del(['dist/']); return del(['dist/']);
} }
function javascript() { function javascript() {
return src(['src/**/*.js', '!src/bundle.js'], {base: './src/'}) return src(['src/**/*.js', '!src/bundle.js'], { base: './src/' })
.pipe(mode.development(sourcemaps.init({loadMaps: true}))) .pipe(mode.development(sourcemaps.init({ loadMaps: true })))
.pipe(babel({ .pipe(babel({
presets: [ presets: [
['@babel/preset-env'] ['@babel/preset-env']
@ -75,14 +74,14 @@ function javascript() {
} }
function webpack() { function webpack() {
return webpack_stream(webpack_config) return stream(config)
.pipe(dest('dist/')) .pipe(dest('dist/'))
.pipe(browserSync.stream()); .pipe(browserSync.stream());
} }
function css() { function css() {
return src(['src/**/*.css', 'src/**/*.scss'], {base: './src/'}) return src(['src/**/*.css', 'src/**/*.scss'], { base: './src/' })
.pipe(mode.development(sourcemaps.init({loadMaps: true}))) .pipe(mode.development(sourcemaps.init({ loadMaps: true })))
.pipe(sass().on('error', sass.logError)) .pipe(sass().on('error', sass.logError))
.pipe(postcss()) .pipe(postcss())
.pipe(mode.development(sourcemaps.write('.'))) .pipe(mode.development(sourcemaps.write('.')))
@ -91,33 +90,34 @@ function css() {
} }
function html() { function html() {
return src(['src/**/*.html', '!src/index.html'], {base: './src/'}) return src(['src/**/*.html', '!src/index.html'], { base: './src/' })
.pipe(mode.production(htmlmin({ collapseWhitespace: true }))) .pipe(mode.bundle(htmlmin({ collapseWhitespace: true })))
.pipe(mode.standalone(htmlmin({ collapseWhitespace: true })))
.pipe(dest('dist/')) .pipe(dest('dist/'))
.pipe(browserSync.stream()); .pipe(browserSync.stream());
} }
function images() { function images() {
return src(['src/**/*.png', 'src/**/*.jpg', 'src/**/*.gif', 'src/**/*.svg'], {base: './src/'}) return src(['src/**/*.png', 'src/**/*.jpg', 'src/**/*.gif', 'src/**/*.svg'], { base: './src/' })
.pipe(imagemin()) .pipe(imagemin())
.pipe(dest('dist/')) .pipe(dest('dist/'))
.pipe(browserSync.stream()); .pipe(browserSync.stream());
} }
function copy() { function copy() {
return src(['src/**/*.json', 'src/**/*.ico'], {base: './src/'}) return src(['src/**/*.json', 'src/**/*.ico'], { base: './src/' })
.pipe(dest('dist/')) .pipe(dest('dist/'))
.pipe(browserSync.stream()); .pipe(browserSync.stream());
} }
function injectBundle() { function injectBundle() {
return src('src/index.html', {base: './src/'}) return src('src/index.html', { base: './src/' })
.pipe(inject( .pipe(inject(
src(['src/scripts/apploader.js'], {read: false}, {base: './src/'}), {relative: true} src(['src/scripts/apploader.js'], { read: false }, { base: './src/' }), { relative: true }
)) ))
.pipe(dest('dist/')) .pipe(dest('dist/'))
.pipe(browserSync.stream()); .pipe(browserSync.stream());
} }
exports.default = series(clean, parallel(javascript, webpack, css, html, images, copy), injectBundle) exports.default = series(clean, parallel(javascript, webpack, css, html, images, copy), injectBundle)
exports.serve = series(exports.default, setStandalone, serve) exports.serve = series(exports.default, standalone, serve)

View file

@ -90,8 +90,9 @@
], ],
"scripts": { "scripts": {
"serve": "gulp serve", "serve": "gulp serve",
"build": "gulp --production", "build": "gulp --bundle",
"build dev": "gulp", "build standalone": "gulp --standalone",
"build development": "gulp",
"lint": "eslint \"src\"", "lint": "eslint \"src\"",
"stylelint": "stylelint \"src/**/*.css\"" "stylelint": "stylelint \"src/**/*.css\""
} }