eject.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. const fs = require('fs-extra')
  2. const path = require('path')
  3. const chalk = require('chalk')
  4. module.exports = async (dir, name) => {
  5. const source = path.resolve(__dirname, '../src/skin')
  6. const target = path.resolve(dir, '.xgplayer/skin')
  7. await fs.copy(source, target)
  8. const skinIndex = path.resolve(target, './index.js')
  9. const skinIndexContent = await fs.readFile(skinIndex, 'utf-8')
  10. const skinIndexTransformed = [skinIndexContent, 'import Player from "xgplayer"', `Player.install("xgplayer-skin-${name}", () => {})`].join('\n')
  11. await fs.writeFile(skinIndex, skinIndexTransformed)
  12. let startJs = path.resolve(target, `controls/start.js`)
  13. let startJsContent = await fs.readFile(startJs, 'utf-8')
  14. let startJsTransformed = startJsContent.replace(/xgplayer-skin-default/, `xgplayer-skin-${name}`)
  15. await fs.writeFile(startJs, startJsTransformed)
  16. await replaceStr('../src/skin/controls/', '.js', [{old: /Player.install/, new: 'Player.use'}, {old: /..\/..\/player/, new: 'xgplayer'}])
  17. await replaceStr('../src/skin/style/', '.scss', [{old: /xgplayer-skin-default/g, new: `xgplayer-skin-${name}`}])
  18. async function replaceStr(filePath, fileType, replaceList) {
  19. let styles = fs.readdirSync(path.resolve(__dirname, filePath))
  20. await styles.forEach(async item => {
  21. if(item.endsWith(fileType)) {
  22. let styleJs = path.resolve(target, `${filePath.slice(12)}${item}`)
  23. let styleJsContent = await fs.readFile(styleJs, 'utf-8')
  24. let styleJsTransformed = styleJsContent
  25. replaceList.forEach(rItem => {
  26. if(rItem.old && rItem.new) {
  27. styleJsTransformed = styleJsTransformed.replace(rItem.old, rItem.new)
  28. }
  29. })
  30. await fs.writeFile(styleJs, styleJsTransformed)
  31. } else {
  32. await replaceStr(`${filePath}${item}/`, fileType, replaceList)
  33. }
  34. })
  35. }
  36. console.log(`Copied default skin into ${chalk.cyan(target)}.`)
  37. }