1
0
mirror of https://github.com/BoostIo/Boostnote synced 2025-12-12 17:26:17 +00:00

switch npm scripts with Grunt task

This commit is contained in:
Dick Choi
2015-12-19 14:51:12 +09:00
parent 7f4ccdcac8
commit 8e44a421a2
5 changed files with 188 additions and 19 deletions

1
.gitignore vendored
View File

@@ -3,3 +3,4 @@ node_modules/*
!node_modules/boost
dist/
compiled
/secret

2
LICENSE Normal file
View File

@@ -0,0 +1,2 @@
本製品をインストール、または使用することによって、お客様は利用規約(
https://b00st.io/regulations.htmlより拘束されることに承諾されたものとします。利用規約に同意されない場合、Boostnoteは、お客様に本製品のインストール、使用のいずれも許諾できません。

141
gruntfile.js Normal file
View File

@@ -0,0 +1,141 @@
const path = require('path')
const ChildProcess = require('child_process')
const packager = require('electron-packager')
const archiver = require('archiver')
const fs = require('fs')
module.exports = function (grunt) {
// Project configuration.
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
auth_code: grunt.file.readJSON('secret/auth_code.json'),
'create-windows-installer': {
x64: {
appDirectory: path.join(__dirname, 'dist', 'Boostnote-win32-x64'),
outputDirectory: path.join(__dirname, 'dist'),
authors: 'MAISIN&CO., Inc.',
exe: 'Boostnote.exe',
loadingGif: path.join(__dirname, 'resources/install.gif'),
iconUrl: path.join(__dirname, 'resources/app.ico'),
setupIcon: path.join(__dirname, 'resources/dmg.ico'),
certificateFile: grunt.config.get('auth_code.win_cert_path'),
certificatePassword: grunt.config.get('auth_code.win_cert_pw'),
noMsi: true,
remoteReleases: 'https://github.com/BoostIO/boost-releases/releases/download/v0.4.10/'
}
}
})
grunt.loadNpmTasks('grunt-electron-installer')
grunt.registerTask('compile', function () {
var done = this.async()
var execPath = path.join('node_modules', '.bin', 'webpack') + ' --config webpack.config.production.js'
grunt.log.writeln(execPath)
var compileProcess = ChildProcess.exec(execPath,
{
env: Object.assign({}, process.env, {
BABEL_ENV: 'production'
})
}, function (err, stdout, stderr) {
grunt.log.writeln(stdout)
if (err) {
grunt.log.writeln(err)
grunt.log.writeln(stderr)
done(false)
return
}
done()
})
})
grunt.registerTask('zip', function (platform) {
var done = this.async()
var archive = archiver.create('zip', {})
switch (platform) {
case 'win':
archive.file(path.join('dist/Setup.exe'), { name:'Boostnote-installer-win32-x64.exe' })
default:
done()
return
}
archive.finalize()
var writeStream = fs.createWriteStream(path.join('dist/Boostnote-installer-win32-x64.zip'))
archive.pipe(writeStream)
writeStream.on('close', function () {
grunt.log.writeln('Zipped!')
done()
})
})
grunt.registerTask('pack', function (platform) {
grunt.log.writeln(path.join(__dirname, 'dist'))
var done = this.async()
var opts = {
name: 'Boostnote',
arch: 'x64',
dir: __dirname,
version: '0.35.4',
'app-version': grunt.config.get('pkg.version'),
'app-bundle-id': 'com.maisin.boost',
asar: true,
prune: true,
overwrite: true,
out: path.join(__dirname, 'dist'),
ignore: /submodules\/ace\/(?!src-min)|submodules\/ace\/(?=src-min-noconflict)|node_modules\/devicon\/icons|dist|.env/
}
switch (platform) {
case 'win':
Object.assign(opts, {
platform: 'win32',
icon: path.join(__dirname, 'resources/app.ico'),
'version-string': {
CompanyName: 'MAISIN&CO., Inc.',
LegalCopyright: '© 2015 MAISIN&CO., Inc. All rights reserved.',
FileDescription: 'Boostnote',
OriginalFilename: 'Boostnote',
FileVersion: grunt.config.get('pkg.version'),
ProductVersion: grunt.config.get('pkg.version'),
ProductName: 'Boostnote',
InternalName: 'Boostnote'
}
})
packager(opts, function (err, appPath) {
if (err) {
grunt.log.writeln(err)
done(err)
return
}
done()
})
break
case 'osx':
Object.assign(opts, {
platform: 'darwin',
icon: path.join(__dirname, 'resources/app.icns'),
'app-category-type': 'public.app-category.developer-tools'
})
packager(opts, function (err, appPath) {
if (err) {
grunt.log.writeln(err)
done(err)
return
}
done()
})
break
}
})
grunt.registerTask('build', function (platform) {
if (!platform) {
platform = process.platform === 'darwin' ? 'osx' : process.platform === 'win32' ? 'win' : null
}
switch (platform) {
case 'win':
grunt.task.run(['pack:win', 'create-windows-installer', 'zip:win'])
}
})
// Default task(s).
grunt.registerTask('default', ['build'])
}

View File

@@ -1,14 +1,12 @@
{
"name": "boost",
"version": "0.4.6",
"description": "Boost App",
"description": "Boostnote",
"main": "index.js",
"scripts": {
"start": "electron ./index.js",
"hot": "electron ./index.js --hot",
"webpack": "webpack-dev-server --hot --inline --config webpack.config.js",
"compile": "webpack --config webpack.config.production.js",
"pack:osx": "electron-packager ./ Boost --app-version=$npm_package_version $npm_package_config_platform $npm_package_config_version $npm_package_config_ignore --overwrite --out=\"dist\"",
"codesign": "codesign --verbose --deep --force --sign \"MAISIN solutions Inc.\" dist/Boost-darwin-x64/Boost.app",
"build:osx": "electron-builder \"dist/Boost-darwin-x64/Boost.app\" --platform=osx --out=\"dist\" --config=\"./builder-config.json\"",
"release": "electron-release --app=\"dist/Boost-darwin-x64/Boost.app\" --token=$(cat .env/.github-token) --repo=\"BoostIO/boost-releases\""
@@ -55,12 +53,15 @@
"superagent-promise": "^1.0.3"
},
"devDependencies": {
"archiver": "^0.20.0",
"babel-loader": "^5.3.2",
"babel-plugin-react-transform": "^1.1.1",
"css-loader": "^0.19.0",
"electron-packager": "^5.1.0",
"electron-prebuilt": "^0.35.1",
"electron-release": "^2.2.0",
"grunt": "^0.4.5",
"grunt-electron-installer": "^1.2.0",
"nib": "^1.1.0",
"react": "^0.14.0",
"react-dom": "^0.14.0",

View File

@@ -1,15 +1,18 @@
var webpack = require('webpack')
module.exports = {
entry: {
main: './browser/main/index.js',
finder: './browser/finder/index.js'
},
output: {
path: 'compiled',
filename: '[name].js',
// sourceMapFilename: '[name].map',
libraryTarget: 'commonjs2'
},
var path = require('path')
var JsonpTemplatePlugin = webpack.JsonpTemplatePlugin
var FunctionModulePlugin = require('webpack/lib/FunctionModulePlugin')
var NodeTargetPlugin = require('webpack/lib/node/NodeTargetPlugin')
var opt = {
path: path.join(__dirname, 'compiled'),
filename: '[name].js',
sourceMapFilename: '[name].map',
libraryTarget: 'commonjs2',
publicPath: 'http://localhost:8080/assets/'
}
config = {
module: {
loaders: [
{
@@ -24,11 +27,26 @@ module.exports = {
}
]
},
entry: {
main: './browser/main/index.js',
finder: './browser/finder/index.js'
},
output: opt,
resolve: {
extensions: ['', '.js', '.jsx'],
packageMains: ['webpack', 'browser', 'web', 'browserify', ['jam', 'main'], 'main'],
alias: {
'boost': path.resolve(__dirname, 'lib')
}
},
plugins: [
new webpack.NoErrorsPlugin(),
new NodeTargetPlugin(),
new webpack.optimize.OccurenceOrderPlugin(),
new webpack.DefinePlugin({
'process.env': {
'NODE_ENV': JSON.stringify('production')
'NODE_ENV': JSON.stringify('production'),
'BABEL_ENV': JSON.stringify('production')
}
}),
new webpack.optimize.UglifyJsPlugin({
@@ -49,8 +67,14 @@ module.exports = {
'highlight.js',
'markdown-it-emoji',
'fs-jetpack'
],
resolve: {
extensions: ['', '.js', '.jsx', 'styl']
}
]
}
config.target = function renderer (compiler) {
compiler.apply(
new JsonpTemplatePlugin(opt),
new FunctionModulePlugin(opt)
)
}
module.exports = config