Commit c419414f authored by 陈豪's avatar 陈豪

add rollup

parent 737ae9a6
WXT_ORIGIN = 'https://www.weixiaotong.com.cn/'
DOCUMENT_WIDTH = 1500
DOCUMENT_HEIGHT = 2668
BROWER_PAGE_COUNT = 1
BROWER_PAGE_COUNT = 2
OPEN_MONITORING_SYSTEM = 1
OPEN_GENERATE_LOG = 1
NODE_ENV = production
GROWTH_RESOURCE_PATH = ''
\ No newline at end of file
......@@ -3,7 +3,7 @@
"version": "1.0.0",
"description": "",
"scripts": {
"test": "node ./src/server/scripts/index"
"build": "node ./scripts/build"
},
"author": "",
"license": "ISC",
......@@ -11,8 +11,21 @@
"archiver": "^5.2.0",
"chalk": "^4.1.0",
"dotenv": "^8.2.0",
"execa": "^5.0.0",
"ora": "^5.3.0",
"os-utils": "0.0.14",
"puppeteer": "2.1.1"
},
"devDependencies": {
"@babel/core": "^7.13.1",
"@rollup/plugin-alias": "^3.1.2",
"@rollup/plugin-babel": "^5.3.0",
"@rollup/plugin-commonjs": "^17.1.0",
"@rollup/plugin-json": "^4.1.0",
"@rollup/plugin-node-resolve": "^11.2.0",
"@rollup/plugin-replace": "^2.4.1",
"builtin-modules": "^3.2.0",
"rollup": "^2.39.0",
"rollup-plugin-terser": "^7.0.2"
}
}
require('dotenv').config()
import path from 'path'
import {terser} from 'rollup-plugin-terser'
import resolve from '@rollup/plugin-node-resolve'
import builtins from 'builtin-modules'
import json from '@rollup/plugin-json'
import commonjs from '@rollup/plugin-commonjs'
import alias from '@rollup/plugin-alias'
import replace from '@rollup/plugin-replace'
import babel from '@rollup/plugin-babel'
const protoFile = path.resolve(__dirname, 'src/server/index.js')
const projectRootDir = path.resolve(__dirname)
export default {
input: protoFile,
output: {
file: path.resolve(__dirname, 'dist/generate.js'),
format: 'cjs',
exports: 'default'
},
external: [...builtins, 'puppeteer', 'archiver'],
plugins: [
babel(),
replace({
values: {
__ROOTPATH__: process.env.PWD,
__PAGECOUNT__: process.env.BROWER_PAGE_COUNT,
__DOCUMENTWIDTH__: process.env.DOCUMENT_WIDTH,
__DOCUMENTHEIGHT__: process.env.DOCUMENT_HEIGHT,
__OPENSYSTEM__: process.env.OPEN_MONITORING_SYSTEM,
__GENERATELOG__: process.env.OPEN_GENERATE_LOG
}
}),
terser({
output: {
comments: true
}
}),
alias({
entries: [
{find: '@', replacement: path.resolve(projectRootDir, './src')},
{
find: '@server',
replacement: path.resolve(projectRootDir, './src/server')
}
]
}),
commonjs({
transformMixedEsModules: true,
dynamicRequireTargets: [
'node_modules/**/*readable-stream/lib/*.js',
'node_modules/*glob/sync.js',
'node_modules/*glob/glob.js'
]
}),
json(),
resolve()
]
}
const path = require('path')
const execa = require('execa')
const fs = require('fs')
const distFile = path.resolve(__dirname, '../dist')
const resourceFile = path.resolve(distFile, 'resource')
;(async () => {
try {
fs.statSync(distFile)
} catch (e) {
fs.mkdirSync(distFile)
}
await runExeca()
})()
async function runExeca() {
await execa('rollup', ['-c'], {
stdio: 'inherit'
})
}
const fs = require('fs')
const path = require('path')
const archiver = require('archiver')
// const {objectUtils} = require('wxt-utils')
const pathResources = path.resolve(__dirname, '../resources')
const nodePwd = '__ROOTPATH__'
const pathResources = path.resolve(nodePwd, './resources')
const resolve = p => path.resolve(pathResources, p)
module.exports = class Archiver {
......
const path = require('path')
const pathResources = path.resolve(__dirname, '../../resources')
const resolve = p => path.resolve(pathResources, p)
// conf
const documentWidth = process.env.DOCUMENT_WIDTH - 0
const documentHeight = process.env.DOCUMENT_HEIGHT - 0
const documentWidth = __DOCUMENTWIDTH__
const documentHeight = __DOCUMENTHEIGHT__
module.exports = async function generation(page, url, pageIndex) {
/**
......@@ -13,7 +10,7 @@ module.exports = async function generation(page, url, pageIndex) {
*/
await page.setViewport({width: documentWidth, height: documentHeight})
await page.goto(url, {
timeout: 120000 // 请求超时时间
timeout: 40000 // 请求超时时间
// waitUntil: []
})
......
const EventEmitter = require('events')
const puppeteer = require('puppeteer')
const {infoLog, warnningLog} = require('../../utils/console')
const {logWithSpinner, stopSpinner} = require('../../utils/org')
const {infoLog, warnningLog, log} = require('@/utils/console')
const {logWithSpinner, stopSpinner, failSpinner} = require('@/utils/org')
const {generateImage} = require('./lib')
const Archiver = require('../compression/archiver')
const Archiver = require('@server/compression/archiver')
const pageCount = process.env.BROWER_PAGE_COUNT - 0
const pageCount = __PAGECOUNT__
class Screen extends EventEmitter {
constructor(urls) {
......@@ -32,7 +32,9 @@ class Screen extends EventEmitter {
async initBrowser() {
// init(create) browser
this.browser = await puppeteer.launch({
this.browser = await puppeteer
.launch({
// ignoreDefaultArgs: ['--mute-audio'],
headless: true, // false将有浏览器界面启动
// slowMo: 100, // 放慢浏览器执行速度,方便测试观察
args: [
......@@ -49,15 +51,24 @@ class Screen extends EventEmitter {
// 是否将浏览器进程标准输出和标准错误输入到 process.stdout 和 process.stderr 中
dumpio: false
})
.catch(e => {
failSpinner(e.toString())
process.exit(1)
})
}
async initPages() {
// init(create) page
this.browserPages = []
try {
for (let i = 0; i < pageCount; i++) {
let browerPage = await this.browser.newPage()
this.browserPages.push(browerPage)
}
} catch (e) {
failSpinner(e.toString())
process.exit(1)
}
}
async closePages() {
......@@ -93,15 +104,16 @@ class Screen extends EventEmitter {
}
// close
compression.archiveFinalize()
await this.closePages()
await this.closeBrowser()
compression.archiveFinalize()
}
readyGeneratePromise(starIndex) {
// 整理出 Promise list (多page generate)
let generatePromise = []
let generateUrls = []
log()
for (let i = 0; i < pageCount; i++) {
let targetIndex = starIndex + i
......@@ -113,13 +125,20 @@ class Screen extends EventEmitter {
// url 存在为空的情况 跳过创建 generatePromise
if (!targetUrl) continue
// this.emit('info', {
// code: 'INFO_GENERATE_URL',
// info: targetUrl
// })
generateUrls.push(targetUrl) // 标记记录
// set generate promise - item
generatePromise.push(generateImage(targetPage, targetUrl))
}
this.emit('info', {code: 'INFO_GENERATE_URLS', info: generateUrls})
this.emit('info', {
code: 'INFO_GENERATE_URLS',
info: generateUrls.join('\n')
})
return generatePromise
}
}
......
require('dotenv').config()
const {successLog, warnningLog} = require('@/utils/console')
const event = require('@/utils/event')
const {successLog, warnningLog} = require('../../utils/console')
const event = require('../../utils/event')
const {urls} = require('@/test.response')
const {urls} = require('../../test.response')
const Screen = require('../generation/puppeteer')
;(async function () {
const Screen = require('@server/generation/puppeteer')
async function intoGenerate() {
let screen = new Screen(urls)
// add event
event(screen)
......@@ -23,9 +21,9 @@ const Screen = require('../generation/puppeteer')
)
} catch (e) {
// error
warnningLog(`screen.startGenerate had error:${JSON.stringify(e)}`)
warnningLog(`\nscreen.startGenerate had error:${JSON.stringify(e)}`)
process.exit(0)
}
})()
}
// module.exports = generates
intoGenerate()
const {warnningLog, log} = require('./console')
const {infoLog, warnningLog, log} = require('./console')
const os = require('os-utils')
const isMonitoringSystem = process.env.OPEN_MONITORING_SYSTEM - 0 // 系统cpu 使用监控
const isMonitoringSystem = __OPENSYSTEM__ // 系统cpu 使用监控
const isGenerateLog = __GENERATELOG__ // 生成服务进度日志
module.exports = function eventLog(event) {
if (!event) {
warnningLog('❌ node.event(EventEmitter) object is null')
return
}
// 生成服务号过程中的日志信息
{
if (isGenerateLog) {
// 正常info - 进度,节点标记
event.on('info', ({code, info}) => {
switch (code) {
case 'INFO_GENERATE_URL':
case 'INFO_GENERATE_URLS':
infoLog(info)
break
default:
break
}
})
// 错误(警告⚠️)信息()
event.on('error', () => {})
}
}
if (isMonitoringSystem) {
// 打印os资源使用情况(Usage/Free)
{
if (isMonitoringSystem) {
event.on('os', () => {
// cpu - 1s后
logCpuInfo()
......@@ -20,14 +40,15 @@ module.exports = function eventLog(event) {
}, 1000)
})
}
}
}
logCpuInfo = () => {
function logCpuInfo() {
os.cpuUsage(v => warnningLog('\nCPU Usage (%): ' + numberFix(v * 100)))
os.cpuFree(v => warnningLog('CPU Free(%): ' + numberFix(v * 100)))
}
logFreemem = () => {
function logFreemem() {
let freememCout = numberFix(os.freemem())
warnningLog(`Free memory :${freememCout}`)
}
......
var os = require('os-utils')
const path = require('path')
os.cpuUsage(function (v) {
console.log('CPU Usage (%): ' + v)
})
const pathResources = path.resolve(__dirname, '../')
const resolve = p => path.resolve(pathResources, p)
os.cpuFree(function (v) {
console.log('CPU Free:' + v)
})
console.log(pathResources)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment