nertc-sdk
Version:
nertc-electron-sdk
155 lines (146 loc) • 5.38 kB
JavaScript
const { task, option, logger, argv } = require('just-task')
const fs = require('fs')
const download = require('download')
const path = require('path')
const fetchWrapper = require('./scripts/fetch_wrapper')
const buildAddon = require('./scripts/build_addon')
const packAddon = require('./scripts/pack_addon')
const fsExtra = require('fs-extra')
option('target')
option('target_platform', { default: process.platform, choices: ['darwin', 'win32', 'linux'] })
option('target_arch', { default: process.arch, choices: ['ia32', 'x64'] })
option('runtime', { default: 'electron', choices: ['electron', 'node'] })
option('debug', { default: false, boolean: true })
option('silent', { default: false, boolean: true })
option('download_url')
const includePath = 'nertc_sdk'
const tempPath = 'temporary'
const packageMeta = require(path.join(__dirname, 'package.json'))
const nativeWinUrl = `http://yx-web.nos.netease.com/package/1636942651/NERTC_Windows_SDK_V4.1.304.zip`
const nativeMacUrl = `http://yx-web.nos.netease.com/package/1636942703/NERTC_MacOS_SDK_V4.1.304.zip`
task('fetch-wrapper', () => {
const platform = argv().target_platform
const arch = argv().target_arch
const temporaryPath = path.join(__dirname, tempPath)
const extractPath = path.join(__dirname, includePath)
const downloadUrl = argv().download_url
let fetchUrl
if (platform === 'win32') {
fetchUrl = downloadUrl || nativeWinUrl
} else if (platform === 'darwin') {
fetchUrl = downloadUrl || nativeMacUrl
}
return fetchWrapper({
platform,
arch,
fetchUrl,
temporaryPath,
extractPath
})
})
task('build', () => {
const target = argv().target
const platform = argv().target_platform
const arch = argv().target_arch
const runtime = argv().runtime
const version = packageMeta.version
const packageName = packageMeta.name
const sourcePath = path.join(__dirname, includePath)
logger.info(JSON.stringify(argv()))
return new Promise((resolve, reject) => {
buildAddon({
target,
runtime,
platform,
arch
}).then(() => {
return packAddon({
packageName,
version,
target,
platform,
arch,
runtime
})
}).then(() => resolve())
})
})
task('package', () => {
logger.info(JSON.stringify(argv()))
const target = argv().target
const platform = argv().target_platform
const arch = argv().target_arch
const runtime = argv().runtime
const version = packageMeta.version
const packageName = packageMeta.name
return packAddon({
packageName,
version,
target,
platform,
arch,
runtime
})
})
task('install', () => {
if ((process.env.npm_config_skip_install || false)) {
logger.info('[install] Skip downlaod prebuilt libraries.')
return
}
let target = '5.0.8'
let runtime = 'electron'
const targetPlatform = process.env.npm_config_target_platform || process.platform
const targetArch = process.env.npm_config_target_arch || process.arch
const downloadUrl = process.env.npm_config_download_url
const curPkgMeta = require(path.join(__dirname, 'package.json'))
const rootPkgMeta = require(path.join(process.env.INIT_CWD, 'package.json'))
logger.info('------------------ just install --------------------')
if (rootPkgMeta.devDependencies && rootPkgMeta.devDependencies.electron) {
// v13.1.2 => 13.1.2, remove prefix 'v'
target = rootPkgMeta.devDependencies.electron.replace(/^.*?(\d+.+\d).*/, '$1')
} else {
target = process.version.match(/^v(\d+\.\d+)/)[1]
runtime = 'node'
}
// 13.1.2 => 13.1, match major.minor only
const nodeAbi = `${runtime}-v${target.replace(/^(\d+.+?\d+).*/, '$1')}`
return new Promise((resolve, reject) => {
const host = 'https://yx-web-nosdn.netease.im'
const remotePath = 'package'
const packageName = `${curPkgMeta.name}-v${curPkgMeta.version}-${nodeAbi}-${targetPlatform}-${targetArch}.tar.gz`
const localPath = 'build/Release'
const buildReleasePath = path.join(__dirname, localPath)
console.log('[install] release dir' + buildReleasePath)
if(fs.existsSync(buildReleasePath)){
console.log('[install] del release dir')
fs.rmdirSync(buildReleasePath, { recursive: true })
}
download(`${host}/${remotePath}/${packageName}`, path.join(__dirname, localPath), {
extract: true
}).then(() => {
logger.info(`[install] Download prebuilt binaries from ${host}/${remotePath}/${packageName}`)
resolve()
}).catch(err => {
let fetchUrl
if (targetPlatform === 'win32') {
fetchUrl = downloadUrl || nativeWinUrl
} else if (targetPlatform === 'darwin') {
fetchUrl = downloadUrl || nativeMacUrl
}
logger.warn(`[install] Failed to download package from: ${host}/${remotePath}/${packageName}, error code: ${err.statusCode}`)
logger.info('[install] Start build from local source file.')
const extractPath = path.join(__dirname, includePath)
fetchWrapper({
fetchUrl,
extractPath
}).then(() => {
return buildAddon({
target,
runtime
})
}).then(() => resolve()).catch((err) => {
reject(err)
})
})
})
})