Update build system

This commit is contained in:
daniel-j 2018-03-12 22:03:58 +01:00
parent 3efe5935d7
commit 592513dd47
9 changed files with 148 additions and 93 deletions

8
.gitignore vendored
View File

@ -1,13 +1,11 @@
.DS_Store
node_modules/
extension/fimfic2epub.js
extension/eventPage.js
extension/*.js.map
extension/build/
extension.crx
extension.pem
extension.xpi
extension.zip
fimfic2epub.safariextension/
fimfic2epub.js
fimfic2epub.js.map
dist/
build/
*.epub

View File

@ -1,13 +1,9 @@
#!/usr/bin/env node
// Fix for mithril
const noop = () => {}
global.window = {
document: { createDocumentFragment: noop },
history: { pushState: noop }
}
// use a mock DOM so we can run mithril on the server
require('mithril/test-utils/browserMock')(global)
const FimFic2Epub = require('../fimfic2epub')
const FimFic2Epub = require('../dist/fimfic2epub')
const fs = require('fs')
const STORY_ID = process.argv[2]
@ -22,9 +18,11 @@ if (outputStdout) {
}
ffc.on('progress', (percent, status) => {
/*
if (status) {
console.log('fimfic2epub: ' + status)
}
*/
})
ffc.fetchAll()

View File

@ -27,7 +27,7 @@
<dict>
<key>End</key>
<array>
<string>fimfic2epub.js</string>
<string>build/fimfic2epub.js</string>
</array>
</dict>
<key>Whitelist</key>

View File

@ -1,10 +1,10 @@
<!DOCTYPE html>
<html>
<head>
<title>Background page</title>
<title>fimfic2epub background page</title>
</head>
<body>
<script type="text/javascript" src="eventPage.js"></script>
<script type="text/javascript" src="build/eventPage.js"></script>
</body>
</html>

View File

@ -4,21 +4,20 @@
"name": "fimfic2epub",
"short_name": "fimfic2epub",
"description": "Improved EPUB exporter for Fimfiction",
"version": "1.6.5",
"icons": {
"128": "icon-128.png"
},
"background": {
"scripts": ["eventPage.js"],
"scripts": ["build/eventPage.js"],
"persistent": false
},
"content_scripts": [
{
"matches": ["https://www.fimfiction.net/*", "http://www.fimfiction.net/*"],
"js": ["fimfic2epub.js"],
"js": ["build/fimfic2epub.js"],
"css": ["inject.css"]
}
],

View File

@ -7,11 +7,14 @@ import Sequence from 'run-sequence'
import watch from 'gulp-watch'
import lazypipe from 'lazypipe'
import filter from 'gulp-filter'
import merge from 'merge-stream'
import change from 'gulp-change'
import rename from 'gulp-rename'
import jsonedit from 'gulp-json-editor'
import zip from 'gulp-zip'
import { execFile, exec } from 'child_process'
// import { execFile, exec } from 'child_process'
// script
import standard from 'gulp-standard'
@ -20,44 +23,33 @@ import webpackConfig from './webpack.config.babel.js'
const sequence = Sequence.use(gulp)
const inProduction = process.env.NODE_ENV === 'production' || process.argv.indexOf('-p') !== -1
// const inProduction = process.env.NODE_ENV === 'production' || process.argv.indexOf('-p') !== -1
let watchOpts = {
readDelay: 500,
verbose: true
verbose: true,
read: false
}
webpackConfig.forEach((c) => {
if (inProduction) {
c.plugins.push(new webpack.optimize.ModuleConcatenationPlugin())
c.plugins.push(new webpack.LoaderOptionsPlugin({
minimize: true,
debug: false
}))
/*
c.plugins.push(new webpack.optimize.UglifyJsPlugin({
compress: {
warnings: false,
screw_ie8: true
},
comments: false,
mangle: {
screw_ie8: true
},
screw_ie8: true,
sourceMap: !!c.devtool
}))
*/
}
c.plugins.push(new webpack.DefinePlugin({
FIMFIC2EPUB_VERSION: JSON.stringify(require('./package.json').version)
}))
let packageVersion = require('./package.json').version
let webpackDefines = new webpack.DefinePlugin({
FIMFIC2EPUB_VERSION: JSON.stringify(packageVersion)
})
const wpCompiler = webpack(webpackConfig)
webpackConfig.forEach((c) => {
c.plugins.push(webpackDefines)
})
let wpCompiler = webpack(webpackConfig)
function webpackTask (callback) {
// run webpack
if (webpackDefines.definitions.FIMFIC2EPUB_VERSION !== JSON.stringify(packageVersion)) {
webpackDefines.definitions.FIMFIC2EPUB_VERSION = JSON.stringify(packageVersion)
wpCompiler = webpack(webpackConfig)
}
// run webpack compiler
wpCompiler.run(function (err, stats) {
if (err) throw new gutil.PluginError('webpack', err)
gutil.log('[webpack]', stats.toString({
@ -71,6 +63,16 @@ function webpackTask (callback) {
})
}
function convertFontAwesomeVars (contents) {
let vars = {}
let matchVar = /\$fa-var-(.*?): "\\(.*?)";/g
let ma
for (;(ma = matchVar.exec(contents));) {
vars[ma[1]] = String.fromCharCode(parseInt(ma[2], 16))
}
return JSON.stringify(vars)
}
let lintPipe = lazypipe()
.pipe(filter, ['**/*', '!src/lib/**/*'])
.pipe(standard)
@ -78,21 +80,25 @@ let lintPipe = lazypipe()
// Cleanup task
gulp.task('clean', () => del([
'extension/fimfic2epub.js',
'extension/eventPage.js',
'extension/*.js.map',
'fimfic2epub.js',
'fimfic2epub.js.map',
'build/',
'extension/build/',
'dist/',
'extension.zip',
'extension.xpi',
'extension.crx',
'fimfic2epub.safariextension/'
]))
gulp.task('version', (done) => {
delete require.cache[require.resolve('./package.json')]
packageVersion = require('./package.json').version
done()
})
// Main tasks
gulp.task('webpack', webpackTask)
gulp.task('webpack', ['version', 'fontawesome'], webpackTask)
gulp.task('watch:webpack', () => {
return watch(['src/**/*.js', 'src/**/*.styl'], watchOpts, function () {
return watch(['src/**/*.js', 'src/**/*.styl', './package.json'], watchOpts, () => {
return sequence('webpack')
})
})
@ -101,8 +107,8 @@ gulp.task('lint', () => {
return gulp.src(['gulpfile.babel.js', 'webpack.config.babel.js', 'src/**/*.js', 'bin/fimfic2epub']).pipe(lintPipe())
})
gulp.task('watch:lint', () => {
return watch(['src/**/*.js', 'gulpfile.babel.js', 'webpack.config.babel.js', 'bin/fimfic2epub'], watchOpts, function (file) {
gulp.src(file.path).pipe(lintPipe())
return watch(['src/**/*.js', 'gulpfile.babel.js', 'webpack.config.babel.js', 'bin/fimfic2epub'], watchOpts, (file) => {
return gulp.src(file.path).pipe(lintPipe())
})
})
@ -113,20 +119,38 @@ gulp.task('default', (done) => {
// Watch task
gulp.task('watch', (done) => {
sequence('default', ['watch:lint', 'watch:webpack'], done)
sequence('default', ['watch:lint', 'watch:pack', 'watch:webpack'], done)
})
// creates extensions for chrome and firefox
gulp.task('fontawesome', () => {
let copy = gulp.src('node_modules/font-awesome/fonts/fontawesome-webfont.ttf')
.pipe(gulp.dest('extension/build/fonts/'))
let codes = gulp.src('node_modules/font-awesome/scss/_variables.scss')
.pipe(change(convertFontAwesomeVars))
.pipe(rename({
basename: 'font-awesome-codes',
extname: '.json',
dirname: ''
}))
.pipe(gulp.dest('build/'))
return merge(copy, codes)
})
gulp.task('pack', (done) => {
sequence(['pack:firefox', 'pack:chrome', 'pack:safari'], done)
sequence(['pack:firefox', 'pack:chrome'], done)
})
gulp.task('watch:pack', () => {
return watch(['extension/**/*', '!extension/build/**/*'], watchOpts, () => {
return sequence('pack')
})
})
gulp.task('pack:firefox', () => {
let manifest = filter('extension/manifest.json', {restore: true})
gulp.task('pack:firefox', ['version'], () => {
const manifest = filter('extension/manifest.json', {restore: true})
return gulp.src('extension/**/*')
.pipe(manifest)
.pipe(jsonedit(function (json) {
.pipe(jsonedit((json) => {
json.version = packageVersion
if (json.content_scripts) {
// tweak the manifest so Firefox can read it
json.applications = {
@ -143,20 +167,23 @@ gulp.task('pack:firefox', () => {
.pipe(gulp.dest('./'))
})
gulp.task('pack:chrome', (done) => {
execFile('./packchrome.sh', [], (error, stdout, stderr) => {
// gutil.log('[pack:chrome]', stdout)
if (error) {
done(new gutil.PluginError('pack:chrome', stderr, {showStack: false}))
return
}
done()
})
gulp.task('pack:chrome', ['version'], (done) => {
const manifest = filter('extension/manifest.json', {restore: true})
return gulp.src('extension/**/*')
.pipe(manifest)
.pipe(jsonedit({
version: packageVersion
}))
.pipe(manifest.restore)
.pipe(zip('extension.zip'))
.pipe(gulp.dest('./'))
})
/*
gulp.task('pack:safari', (done) => {
exec('rm -rf fimfic2epub.safariextension/; cp -r extension/ fimfic2epub.safariextension', [], (error, stdout, stderr) => {
// gutil.log('[pack:chrome]', stdout)
// gutil.log('[pack:safari]', stdout)
if (error || stderr) {
done(new gutil.PluginError('pack:safari', stderr, {showStack: false}))
return
@ -164,3 +191,4 @@ gulp.task('pack:safari', (done) => {
done()
})
})
*/

View File

@ -8,15 +8,15 @@
"url": "https://github.com/daniel-j/fimfic2epub.git"
},
"scripts": {
"build": "gulp -p"
"build": "NODE_ENV=production gulp",
"dev": "NODE_ENV=development gulp"
},
"bin": {
"fimfic2epub": "./bin/fimfic2epub"
},
"main": "fimfic2epub.js",
"main": "dist/fimfic2epub.js",
"files": [
"fimfic2epub.js",
"fimfic2epub.js.map",
"dist/",
"bin/"
],
"dependencies": {
@ -40,28 +40,33 @@
"devDependencies": {
"autosize": "^4.0.0",
"babel-core": "^6.26.0",
"babel-loader": "^7.1.2",
"babel-loader": "^7.1.4",
"babel-preset-env": "^1.6.1",
"babel-preset-es2015": "^6.14.0",
"babel-preset-node6": "^11.0.0",
"babel-register": "^6.26.0",
"del": "^3.0.0",
"es6-event-emitter": "^1.10.2",
"exports-loader": "^0.6.3",
"exports-loader": "^0.7.0",
"file-saver": "^1.3.2",
"font-awesome": "4.7.0",
"gulp": "^3.9.1",
"gulp-change": "^1.0.0",
"gulp-filter": "^5.0.1",
"gulp-json-editor": "^2.2.1",
"gulp-rename": "^1.2.2",
"gulp-standard": "^10.1.1",
"gulp-util": "^3.0.7",
"gulp-watch": "^4.3.9",
"gulp-watch": "^5.0.0",
"gulp-zip": "^4.0.0",
"lazypipe": "^1.0.1",
"merge-stream": "^1.0.1",
"raw-loader": "^0.5.1",
"run-sequence": "^2.2.0",
"standard": "^10.0.3",
"standard": "^11.0.0",
"stylus": "^0.54.5",
"stylus-loader": "^3.0.1",
"webpack": "^3.8.1",
"webpack": "^4.1.1",
"webpack-node-externals": "^1.3.3"
},
"standard": {

View File

@ -4,7 +4,7 @@ CHROME=`command -v chrome || command -v chromium || command -v chromium-browser
rm -f extension.crx
z=`cd extension && zip -Xr9D ../extension.zip .`
# z=`cd extension && zip -Xr9D ../extension.zip .`
code=-1

View File

@ -12,7 +12,7 @@ const bundleExtensionConfig = {
output: {
path: path.join(__dirname, '/'),
filename: './extension/[name].js'
filename: './extension/build/[name].js'
},
module: {
@ -38,16 +38,27 @@ const bundleExtensionConfig = {
modules: [
path.resolve('./src'),
'node_modules'
],
alias: {
fs: require.resolve('./src/false.js')
}
]
},
node: {
fs: 'empty'
},
externals: ['request'],
plugins: [],
devtool: 'source-map'
plugins: [
// new (require('webpack-bundle-analyzer').BundleAnalyzerPlugin)()
],
performance: {
hints: false
},
optimization: {
concatenateModules: inProduction,
minimize: inProduction
},
devtool: inProduction ? 'nosources-source-map' : 'source-map',
mode: inProduction ? 'production' : 'development'
}
const bundleNpmModuleConfig = {
@ -55,7 +66,7 @@ const bundleNpmModuleConfig = {
output: {
path: path.join(__dirname, '/'),
filename: './fimfic2epub.js',
filename: './dist/fimfic2epub.js',
libraryTarget: 'commonjs2'
},
@ -69,7 +80,11 @@ const bundleNpmModuleConfig = {
exclude: /node_modules/,
query: {
sourceMaps: !inProduction,
presets: ['es2015']
presets: [['env', {
targets: {
node: '8.0.0'
}
}]]
}
},
{
@ -87,10 +102,22 @@ const bundleNpmModuleConfig = {
]
},
node: {
__dirname: false
},
externals: [nodeExternals({whitelist: ['es6-event-emitter', /^babel-runtime/]})],
plugins: [],
devtool: 'source-map'
performance: {
hints: false
},
optimization: {
concatenateModules: inProduction,
minimize: inProduction
},
devtool: 'nosources-source-map',
mode: inProduction ? 'production' : 'development'
}
export default [bundleExtensionConfig, bundleNpmModuleConfig]