This repository was archived by the owner on Oct 2, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 51
This repository was archived by the owner on Oct 2, 2020. It is now read-only.
Different cache folder for different envs #76
Copy link
Copy link
Closed
Description
This issue applies both to electron-compile and electron-compilers, sorry
Reading through a bunch of code right now to find out if a different $TEMP/compileCache_${hash} will get generated if NODE_ENV changes, and.. it doesn't like it does?
Here's the default cache directory code:
export function calculateDefaultCompileCacheDirectory() {
let tmpDir = process.env.TEMP || process.env.TMPDIR || '/tmp';
let hash = require('crypto').createHash('md5').update(process.execPath).digest('hex');
let cacheDir = path.join(tmpDir, `compileCache_${hash}`);
mkdirp.sync(cacheDir);
d(`Using default cache directory: ${cacheDir}`);
return cacheDir;
}The problem is:
- One might want to enable code coverage (or other babel plugins) only in testing
- But since all files are cached by their content
- And the files wouldn't change, only the compiler settings would
- Then electron-compile would just happily serve the old cached versions (which may have coverage instrumentation when they shouldn't, and the other way around).
You can probably reproduce the problem easily if you use electron-compile with a .babelrc like:
{
"env": {
"production": {
"presets": ["es2016-node5", "react"],
"sourceMaps": false
},
"development": {
"presets": ["es2016-node5", "react"],
"sourceMaps": "inline"
}
}
}run it once with NODE_ENV=production, then again with NODE_ENV=development, I'm 80% confident you'd end up not seeing sourceMaps still.
Here's my proposal for electron-compile:
- Change
calculateDefaultCompileCacheDirectoryto feed off of- process.execPath
- process.env.NODE_ENV || "development"
- the digest for the info/config/opts object (using
digest-for-object) - see fasterthanlime/electron-compile@a072baf
Tangentially, here's what I've got planned for electron-compilers:
- Add way for compilers to get an input sourceMap
- compilerContext seems okay
- Make babel compiler consume that input sourceMap when it's there
- Drop sorcery dependency
- Make both
coverageoptions (typescript & babel) only apply whenNODE_ENV=test- Alternatively: only do env matching when
coverageis a string, andcoverage: truewould always instrument, so that the old behavior is retained? - Alternatively: don't change anything about the coverage option, force folks to use env blocks
- see fasterthanlime@a98839a
- Alternatively: only do env matching when
- Make both
coverageoption use babel-plugin-istanbul (a relatively thin wrapper over new-istanbul's instrumenting lib).- For babel, this means pushing adding a plug-in to the plugins list
- For typescript, this.. requires babel :/
- see fasterthanlime@a98839a
- Drop dependency to istanbul 0.4.5 (legacy istanbul) - it's somehow still in electron-compile's package.json
- Document how to set up typescript+babel (babel block in the typescript config)
- Document how to set up coverage instrumentation
- Document what coverage instrumentation does (collects coverage info using the new istanbul, aka istanbuljs/istanbuljs, into the global
__coverage__variable) - Give an example of collecting/reporting from a
__coverage__variable, with proper sourceMap support (it's like 8 lines).
Let me know if any of that sounds bad @paulcbetts & others so I can adjust plans accordingly!
Metadata
Metadata
Assignees
Labels
No labels