mirror of
https://github.com/daniel-j/fimfic2epub.git
synced 2025-02-08 09:37:11 +13:00
Update build system
This commit is contained in:
parent
3efe5935d7
commit
592513dd47
9 changed files with 148 additions and 93 deletions
8
.gitignore
vendored
8
.gitignore
vendored
|
@ -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
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
<dict>
|
||||
<key>End</key>
|
||||
<array>
|
||||
<string>fimfic2epub.js</string>
|
||||
<string>build/fimfic2epub.js</string>
|
||||
</array>
|
||||
</dict>
|
||||
<key>Whitelist</key>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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"]
|
||||
}
|
||||
],
|
||||
|
|
|
@ -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()
|
||||
})
|
||||
})
|
||||
*/
|
||||
|
|
23
package.json
23
package.json
|
@ -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": {
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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]
|
||||
|
|
Loading…
Add table
Reference in a new issue