Files
atom/script/lib/transpile-packages-with-custom-transpiler-paths.js
2017-09-10 15:46:40 +00:00

57 lines
2.4 KiB
JavaScript

'use strict'
const CompileCache = require('../../src/compile-cache')
const fs = require('fs-extra')
const glob = require('glob')
const path = require('path')
const CONFIG = require('../config')
const backupNodeModules = require('./backup-node-modules')
const runApmInstall = require('./run-apm-install')
require('colors')
module.exports = function () {
console.log(`Transpiling packages with custom transpiler configurations in ${CONFIG.intermediateAppPath}`)
for (let packageName of Object.keys(CONFIG.appMetadata.packageDependencies)) {
const rootPackagePath = path.join(CONFIG.repositoryRootPath, 'node_modules', packageName)
const intermediatePackagePath = path.join(CONFIG.intermediateAppPath, 'node_modules', packageName)
const metadataPath = path.join(intermediatePackagePath, 'package.json')
const metadata = require(metadataPath)
if (metadata.atomTranspilers) {
console.log(' transpiling for package '.cyan + packageName.cyan)
const rootPackageBackup = backupNodeModules(rootPackagePath)
const intermediatePackageBackup = backupNodeModules(intermediatePackagePath)
// Run `apm install` in the *root* package's path, so we get devDeps w/o apm's weird caching
// Then copy this folder into the intermediate package's path so we can run the transpilation in-line.
runApmInstall(rootPackagePath)
if (fs.existsSync(intermediatePackageBackup.nodeModulesPath)) {
fs.removeSync(intermediatePackageBackup.nodeModulesPath)
}
fs.copySync(rootPackageBackup.nodeModulesPath, intermediatePackageBackup.nodeModulesPath)
CompileCache.addTranspilerConfigForPath(intermediatePackagePath, metadata.name, metadata, metadata.atomTranspilers)
for (let config of metadata.atomTranspilers) {
const pathsToCompile = glob.sync(path.join(intermediatePackagePath, config.glob), {nodir: true})
pathsToCompile.forEach(transpilePath)
}
// Now that we've transpiled everything in-place, we no longer want Atom to try to transpile
// the same files when they're being required.
delete metadata.atomTranspilers
fs.writeFileSync(metadataPath, JSON.stringify(metadata, null, ' '), 'utf8')
CompileCache.removeTranspilerConfigForPath(intermediatePackagePath)
rootPackageBackup.restore()
intermediatePackageBackup.restore()
}
}
}
function transpilePath (path) {
fs.writeFileSync(path, CompileCache.addPathToCache(path, CONFIG.atomHomeDirPath))
}