Browse Source

reduce package file size

pull/58/head 1.0.3
MaysWind 6 years ago
parent
commit
782039f0cc
  1. 98
      copy-app-modules.js
  2. 111
      copy-main-modules.js
  3. 57
      package-lock.json
  4. 28
      package.json

98
copy-app-modules.js

@ -0,0 +1,98 @@
const fs = require('fs-extra');
const path = require('path');
const argv = require('yargs')
.usage('Usage: $0 -d <dist>')
.option('d', {
alias: 'dist',
type: 'string',
describe: 'The directory where dependencies would be copies to.',
})
.option('r', {
alias: 'dryrun',
type: 'boolean',
describe: 'Find the dependencies and log to the screen only.',
})
.option('v', {
alias: 'verbose',
type: 'boolean',
describe: 'Enable verbose log.',
})
.parse();
const pkgfile = require('./package');
function getDependencies(filePath) {
let allDependencies = [];
let cssDependencies = [];
let jsDependencies = [];
let fontDependencies = [];
let fileDir = path.dirname(filePath);
let fileContent = fs.readFileSync(filePath, 'utf8');
let cssPattern = /<link rel="stylesheet" href="(\.\.\/node_modules\/.*\.css)"\/?>/g;
let jsPattern = /<script src="(\.\.\/node_modules\/.*\.js)"><\/script>/g;
let fontPattern = /url\('(\.\.\/fonts\/[a-zA-Z0-9\-]+\.[a-zA-z0-9]+)(\?[a-zA-Z0-9\-_=.#]+)?'\)/g;
for (let match; (match = cssPattern.exec(fileContent)) !== null;) {
let dependencyPath = path.join(fileDir, match[1]);
if (argv.verbose) {
console.log('find css dependency ' + dependencyPath);
}
cssDependencies.push(dependencyPath);
}
for (let i = 0; i < cssDependencies.length; i++) {
let cssFilePath = cssDependencies[i];
let cssFileDir = path.dirname(cssFilePath);
let cssFileContent = fs.readFileSync(cssFilePath, 'utf8');
for (let match; (match = fontPattern.exec(cssFileContent)) !== null;) {
let dependencyPath = path.join(cssFileDir, match[1]);
if (argv.verbose) {
console.log('find font dependency (' + cssFilePath + ') ' + dependencyPath);
}
fontDependencies.push(dependencyPath);
}
}
for (let match; (match = jsPattern.exec(fileContent)) !== null;) {
let dependencyPath = path.join(fileDir, match[1]);
if (argv.verbose) {
console.log('find js dependency ' + dependencyPath);
}
jsDependencies.push(dependencyPath);
}
allDependencies.push(...cssDependencies);
allDependencies.push(...fontDependencies);
allDependencies.push(...jsDependencies);
return allDependencies;
}
function copyDependencies(dependencies, dist) {
for (let i = 0; i < dependencies.length; i++) {
let filePath = dependencies[i];
let srcFilePath = path.join(__dirname, filePath);
let distFilePath = path.join(__dirname, dist, filePath);
let distDir = path.dirname(distFilePath);
if (!fs.existsSync(distDir)) {
fs.mkdirpSync(distDir);
}
fs.copyFileSync(srcFilePath, distFilePath);
}
}
let dependencies = getDependencies(pkgfile.entry);
if (!argv.dryrun) {
copyDependencies(dependencies, argv.dist);
}

111
copy-main-modules.js

@ -0,0 +1,111 @@
const fs = require('fs-extra');
const path = require('path');
const jsonfile = require('jsonfile');
const argv = require('yargs')
.usage('Usage: $0 -d <dist>')
.option('s', {
alias: 'source',
type: 'string',
describe: 'The directory where dependencies is.',
})
.option('d', {
alias: 'dist',
type: 'string',
describe: 'The directory where dependencies would be copies to.',
})
.option('r', {
alias: 'dryrun',
type: 'boolean',
describe: 'Find the dependencies and log to the screen only.',
})
.option('v', {
alias: 'verbose',
type: 'boolean',
describe: 'Enable verbose log.',
})
.parse();
const pkgfile = require('./package');
function getDependencies(allDependenciesDir, level, sourceDir, dependencies) {
for (let i = 0; i < dependencies.length; i++) {
let dependency = dependencies[i];
let dependencyDir = path.join(sourceDir, dependency);
if (!fs.existsSync(dependencyDir)) {
throw new Error('Dependency "' + dependency + '" does not exist!');
}
let dependencyPackageFile = path.join(dependencyDir, 'package.json');
if (!fs.existsSync(dependencyPackageFile)) {
throw new Error('Dependency "' + dependency + '" package file does not exist!');
}
let dependencyPackage = jsonfile.readFileSync(dependencyPackageFile, { throws: false });
if (!dependencyPackage) {
throw new Error('Dependency "' + dependency + '" package file loads failed!');
}
if (argv.verbose) {
let logPrefix = '';
for (let i = 0; i < level * 2; i++) {
logPrefix += '-';
}
console.log(logPrefix + (logPrefix && ' ') + 'find dependency ' + dependency);
}
if (dependencyPackage.dependencies) {
let subDependenciesDir = [];
let subDependencies = [];
for (subDependency in dependencyPackage.dependencies) {
if (!dependencyPackage.dependencies.hasOwnProperty(subDependency)) {
continue;
}
subDependencies.push(subDependency);
}
subDependenciesDir = getDependencies([], level + 1, sourceDir, subDependencies);
allDependenciesDir.push(...subDependenciesDir);
}
allDependenciesDir.push(dependencyDir);
}
return allDependenciesDir;
}
function copyDependencies(dependenciesDir, dist) {
let dependenciesDirSet = {};
for (let i = 0; i < dependenciesDir.length; i++) {
let dependencyDir = dependenciesDir[i];
dependenciesDirSet[dependencyDir] = true;
}
for (let dependencyDir in dependenciesDirSet) {
if (!dependenciesDirSet.hasOwnProperty(dependencyDir)) {
continue;
}
let srcDir = path.join(__dirname, dependencyDir);
let distDir = path.join(__dirname, dist, dependencyDir);
if (!fs.existsSync(distDir)) {
fs.mkdirpSync(distDir);
}
fs.copySync(srcDir, distDir);
}
}
let dependencies = getDependencies([], 0, argv.source, pkgfile.mainDependencies);
if (!argv.dryrun) {
copyDependencies(dependencies, argv.dist);
}

57
package-lock.json

@ -1750,6 +1750,26 @@
"ms": "^2.1.1"
}
},
"fs-extra": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz",
"integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==",
"dev": true,
"requires": {
"graceful-fs": "^4.1.2",
"jsonfile": "^4.0.0",
"universalify": "^0.1.0"
}
},
"jsonfile": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
"integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
"dev": true,
"requires": {
"graceful-fs": "^4.1.6"
}
},
"ms": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
@ -2020,14 +2040,25 @@
}
},
"fs-extra": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz",
"integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==",
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
"integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
"dev": true,
"requires": {
"graceful-fs": "^4.1.2",
"jsonfile": "^4.0.0",
"universalify": "^0.1.0"
},
"dependencies": {
"jsonfile": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
"integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
"dev": true,
"requires": {
"graceful-fs": "^4.1.6"
}
}
}
},
"fs-extra-p": {
@ -2049,6 +2080,17 @@
"graceful-fs": "^4.1.2",
"jsonfile": "^4.0.0",
"universalify": "^0.1.0"
},
"dependencies": {
"jsonfile": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
"integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
"dev": true,
"requires": {
"graceful-fs": "^4.1.6"
}
}
}
}
}
@ -2590,12 +2632,13 @@
}
},
"jsonfile": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
"integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-5.0.0.tgz",
"integrity": "sha512-NQRZ5CRo74MhMMC3/3r5g2k4fjodJ/wh8MxjFbCViWKFjxrnudWSY5vomh+23ZaXzAS7J3fBZIR2dV6WbmfM0w==",
"dev": true,
"requires": {
"graceful-fs": "^4.1.6"
"graceful-fs": "^4.1.6",
"universalify": "^0.1.2"
}
},
"jsonify": {

28
package.json

@ -14,8 +14,10 @@
"postinstall": "install-app-deps",
"clean": "rimraf dist",
"start": "electron .",
"publish:win": "npm run clean && build --win",
"publish:osx": "npm run clean && build --mac"
"copy-main-dependencies": "node copy-main-modules.js -s node_modules -d dist -v",
"copy-app-dependencies": "node copy-app-modules.js -d dist -v",
"publish:win": "npm run clean && npm run copy-main-dependencies && npm run copy-app-dependencies && build --win",
"publish:osx": "npm run clean && npm run copy-main-dependencies && npm run copy-app-dependencies && build --mac"
},
"repository": {
"type": "git",
@ -38,6 +40,8 @@
"devDependencies": {
"electron": "^4.1.4",
"electron-builder": "^20.39.0",
"fs-extra": "^7.0.1",
"jsonfile": "^5.0.0",
"rimraf": "^2.6.2"
},
"dependencies": {
@ -77,11 +81,31 @@
"electron-store": "^3.1.0",
"yargs": "^13.2.2"
},
"mainDependencies": [
"electron-localshortcut",
"electron-store",
"yargs"
],
"build": {
"appId": "net.mayswind.ariang",
"productName": "AriaNg Native",
"copyright": "Copyright (c) 2017-2019 MaysWind (i@mayswind.net)",
"files": [
"!node_modules",
{
"from": "dist/node_modules",
"to": "node_modules",
"filter": [
"**/*.js",
"**/*.json",
"**/*.css",
"**/*.woff",
"**/*.woff2",
"**/*.svg",
"**/*.eot",
"**/*.ttf"
]
},
"app/**",
"assets/**",
"main/**",

Loading…
Cancel
Save