broccolijs / broccoli-persistent-filter Goto Github PK
View Code? Open in Web Editor NEWLicense: MIT License
License: MIT License
DEBUG=broccoli* ember s
a no longer yields broccoli-persistent-filter logging.
With @rwjblue's help, I discovered that building two of my apps in parallel can cause a crash related to broccoli-persistent-filter
. Here is an example stack:
Build failed.
The Broccoli Plugin: [BroccoliMergeTrees: TreeMerger (appAndDependencies)] failed with:
Error: unexpected end of file
at Zlib._handle.onerror (zlib.js:370:17)
The broccoli plugin was instantiated at:
at BroccoliMergeTrees.Plugin (/mnt/jenkins-workspaces/batterii-horizons-deploy/src/buttercup-epcot/apps/bc-admin/node_modules/broccoli-plugin/index.js:7:31)
at new BroccoliMergeTrees (/mnt/jenkins-workspaces/batterii-horizons-deploy/src/buttercup-epcot/apps/bc-admin/node_modules/ember-cli/node_modules/broccoli-merge-trees/index.js:16:10)
at Function.BroccoliMergeTrees [as _upstreamMergeTrees] (/mnt/jenkins-workspaces/batterii-horizons-deploy/src/buttercup-epcot/apps/bc-admin/node_modules/ember-cli/node_modules/broccoli-merge-trees/index.js:10:53)
at mergeTrees (/mnt/jenkins-workspaces/batterii-horizons-deploy/src/buttercup-epcot/apps/bc-admin/node_modules/ember-cli/lib/broccoli/merge-trees.js:85:33)
at EmberApp._mergeTrees (/mnt/jenkins-workspaces/batterii-horizons-deploy/src/buttercup-epcot/apps/bc-admin/node_modules/ember-cli/lib/broccoli/ember-app.js:1815:12)
at EmberApp.appAndDependencies (/mnt/jenkins-workspaces/batterii-horizons-deploy/src/buttercup-epcot/apps/bc-admin/node_modules/ember-cli/lib/broccoli/ember-app.js:1135:17)
at EmberApp.javascript (/mnt/jenkins-workspaces/batterii-horizons-deploy/src/buttercup-epcot/apps/bc-admin/node_modules/ember-cli/lib/broccoli/ember-app.js:1235:30)
at EmberApp.toArray (/mnt/jenkins-workspaces/batterii-horizons-deploy/src/buttercup-epcot/apps/bc-admin/node_modules/ember-cli/lib/broccoli/ember-app.js:1672:12)
at EmberApp.toTree (/mnt/jenkins-workspaces/batterii-horizons-deploy/src/buttercup-epcot/apps/bc-admin/node_modules/ember-cli/lib/broccoli/ember-app.js:1694:38)
at module.exports (/mnt/jenkins-workspaces/batterii-horizons-deploy/src/buttercup-epcot/apps/bc-admin/ember-cli-build.js:97:14)
We determined the cause was related to stefanpenner/async-disk-cache
s use of the system temp directory. The two applications are separate apps (in separate directories), but they are similar in size and almost identical in dependencies. The builds kick off at the same time in parallel. Both builds end up using the same system tmp cache and one clobbers the other.
A workaround is to set an env variable that causes it to not use the system cache:
BROCCOLI_PERSISTENT_FILTER_CACHE_ROOT=./cache ember build -prod
We're having the following build error since yesterday. I'm not able to reproduce locally yet but it fails on our CI when running ember test
. I've tried many different things but the error persists. This is blocking our builds so any help would be much appreciated.
Note that this time it mentioned 'ember-data-copyable' but sometimes it mentions a different dependency so not sure if that's relevant.
Build Error (broccoli-persistent-filter:Babel > [Babel: ember-data-copyable]) in ember-data-copyable/-private/symbols.js
Worker is terminated
working on a fix ...
EEXIST: file already exists, symlink '/Users/stefanpenner/src/y/dsp/tests/index.html' -> '/Users/stefanpenner/src/y/dsp/tmp/babel-output_path-gVwcluk
V.tmp/app/tests/index.html'
Error: EEXIST: file already exists, symlink '/Users/stefanpenner/src/y/dsp/tests/index.html' -> '/Users/stefanpenner/src/y/dsp/tmp/babel-output_path-
gVwclukV.tmp/app/tests/index.html'
at Error (native)
at Object.fs.symlinkSync (fs.js:899:18)
at symlink (/Users/stefanpenner/src/y/dsp/node_modules/ember-cli-babel/node_modules/broccoli-babel-transpiler/node_modules/broccoli-persistent-fi
lter/node_modules/symlink-or-copy/index.js:82:14)
at symlinkOrCopySync (/Users/stefanpenner/src/y/dsp/node_modules/ember-cli-babel/node_modules/broccoli-babel-transpiler/node_modules/broccoli-per
sistent-filter/node_modules/symlink-or-copy/index.js:58:5)
at Babel.<anonymous> (/Users/stefanpenner/src/y/dsp/node_modules/ember-cli-babel/node_modules/broccoli-babel-transpiler/node_modules/broccoli-per
sistent-filter/index.js:92:16)
at /Users/stefanpenner/src/y/dsp/node_modules/ember-cli-babel/node_modules/broccoli-babel-transpiler/node_modules/broccoli-persistent-filter/node
_modules/promise-map-series/index.js:11:14
at lib$rsvp$$internal$$tryCatch (/Users/stefanpenner/src/y/dsp/node_modules/ember-cli-babel/node_modules/broccoli-babel-transpiler/node_modules/b
roccoli-persistent-filter/node_modules/rsvp/dist/rsvp.js:493:16)
at lib$rsvp$$internal$$invokeCallback (/Users/stefanpenner/src/y/dsp/node_modules/ember-cli-babel/node_modules/broccoli-babel-transpiler/node_mod
ules/broccoli-persistent-filter/node_modules/rsvp/dist/rsvp.js:505:17)
at /Users/stefanpenner/src/y/dsp/node_modules/ember-cli-babel/node_modules/broccoli-babel-transpiler/node_modules/broccoli-persistent-filter/node
_modules/rsvp/dist/rsvp.js:1001:13
at lib$rsvp$asap$$flush (/Users/stefanpenner/src/y/dsp/node_modules/ember-cli-babel/node_modules/broccoli-babel-transpiler/node_modules/broccoli-
persistent-filter/node_modules/rsvp/dist/rsvp.js:1198:9)
It's making updating dependencies impossible/hard. There's a pretty good chance it doesn't work out of the box on v0.12 anyway, and Appveyor doesn't run with it (only 4, 6, and 7 right now). I think we should be testing against 4, 6, 8, and 9. Possibly even just 6, 8, and 9.
I am working on a bigger app that has been running smoothly for more than a year. Currently we have ember-cli 2.12 as dependency, everything works ok.
As soon as I switch to ember-cli 2.14 from 2.12, I am getting this error:
The Broccoli Plugin: [broccoli-persistent-filter:Babel > [Babel: lintTree(app)]: Babel: lintTree(app)] failed with:
SyntaxError: XXX/tests/.../XXX.js: Unexpected token (66:6)
64 | const maxDistance = Math.max(...data.map(hole => hole.distance || 0)) || 1;
65 | return data.map(hole => ({
> 66 | ...hole,
| ^
67 | y: sizes.width / 2 / maxDistance * hole.distance,
68 | d: this.shapePath('', sizes.hole),
69 | }));
at Parser.pp$5.raise (/usr/local/src/dev/ui/node_modules/babylon/lib/index.js:4452:13)
at Parser.pp.unexpected (/usr/local/src/dev/ui/node_modules/babylon/lib/index.js:1761:8)
at Parser.pp$3.parseIdentifier (/usr/local/src/dev/ui/node_modules/babylon/lib/index.js:4330:10)
at Parser.pp$3.parsePropertyName (/usr/local/src/dev/ui/node_modules/babylon/lib/index.js:4154:96)
at Parser.pp$3.parseObj (/usr/local/src/dev/ui/node_modules/babylon/lib/index.js:4043:12)
at Parser.pp$3.parseExprAtom (/usr/local/src/dev/ui/node_modules/babylon/lib/index.js:3717:19)
at Parser.pp$3.parseExprSubscripts (/usr/local/src/dev/ui/node_modules/babylon/lib/index.js:3492:19)
at Parser.pp$3.parseMaybeUnary (/usr/local/src/dev/ui/node_modules/babylon/lib/index.js:3472:19)
at Parser.pp$3.parseExprOps (/usr/local/src/dev/ui/node_modules/babylon/lib/index.js:3402:19)
at Parser.pp$3.parseMaybeConditional (/usr/local/src/dev/ui/node_modules/babylon/lib/index.js:3379:19)
at Parser.pp$3.parseMaybeAssign (/usr/local/src/dev/ui/node_modules/babylon/lib/index.js:3342:19)
at Parser.pp$3.parseParenAndDistinguishExpression (/usr/local/src/dev/ui/node_modules/babylon/lib/index.js:3826:26)
at Parser.pp$3.parseExprAtom (/usr/local/src/dev/ui/node_modules/babylon/lib/index.js:3707:19)
at Parser.pp$3.parseExprSubscripts (/usr/local/src/dev/ui/node_modules/babylon/lib/index.js:3492:19)
at Parser.pp$3.parseMaybeUnary (/usr/local/src/dev/ui/node_modules/babylon/lib/index.js:3472:19)
at Parser.pp$3.parseExprOps (/usr/local/src/dev/ui/node_modules/babylon/lib/index.js:3402:19)
at Parser.pp$3.parseMaybeConditional (/usr/local/src/dev/ui/node_modules/babylon/lib/index.js:3379:19)
The broccoli plugin was instantiated at:
at Babel.Plugin (/usr/local/src/dev/ui/node_modules/broccoli-plugin/index.js:7:31)
at Babel.Filter [as constructor] (/usr/local/src/dev/ui/node_modules/broccoli-persistent-filter/index.js:62:10)
at new Babel (/usr/local/src/dev/ui/node_modules/ember-cli/node_modules/broccoli-babel-transpiler/index.js:35:10)
at processModulesOnly (/usr/local/src/dev/ui/node_modules/ember-cli/lib/broccoli/babel-process-modules-only.js:28:10)
at EmberApp.lintTestTrees (/usr/local/src/dev/ui/node_modules/ember-cli/lib/broccoli/ember-app.js:1195:17)
at EmberApp.appTests (/usr/local/src/dev/ui/node_modules/ember-cli/lib/broccoli/ember-app.js:1162:28)
at EmberApp.test (/usr/local/src/dev/ui/node_modules/ember-cli/lib/broccoli/ember-app.js:1148:28)
at EmberApp.toArray (/usr/local/src/dev/ui/node_modules/ember-cli/lib/broccoli/ember-app.js:1679:63)
at EmberApp.toTree (/usr/local/src/dev/ui/node_modules/ember-cli/lib/broccoli/ember-app.js:1694:38)
at module.exports (/usr/local/src/dev/ui/ember-cli-build.js:26:14)
at Builder.setupBroccoliBuilder (/usr/local/src/dev/ui/node_modules/ember-cli/lib/models/builder.js:56:19)
at new Builder (/usr/local/src/dev/ui/node_modules/ember-cli/lib/models/builder.js:30:10)
at ServeTask.run (/usr/local/src/dev/ui/node_modules/ember-cli/lib/tasks/serve.js:24:55)
at Promise.resolve.then (/usr/local/src/dev/ui/node_modules/ember-cli/lib/models/command.js:243:46)
at tryCatch (/usr/local/src/dev/ui/node_modules/rsvp/dist/rsvp.js:539:12)
at invokeCallback (/usr/local/src/dev/ui/node_modules/rsvp/dist/rsvp.js:554:13)
Any ideas what could be the problem? Thanks!
(I have babel-plugin-transform-object-rest-spread and babel-plugin-transform-es2015-destructuring installed as dependencies)
Maybe this is correct place for this issues collection, if not, feel free to close it or redirect me to proper repo.
ember-cli/ember-ajax#428
typed-ember/ember-cli-typescript#724
emberjs/ember-cli-babel#240
I discovered that under certain conditions, when the input node contains two conflicting files like file.js
and file.coffee
, broccoli-persistent-filter will overwrite files in the source directory. I'm not sure if the culprit is broccoli-persistent-filter or fs-tree-diff, so instead of writing a test case I just created a sample repo for now. To reproduce this issue, run:
git clone https://github.com/joliss/broccoli-persistent-filter-issue
cd broccoli-persistent-filter-issue
npm install
./node_modules/.bin/broccoli serve
Then in a new terminal, run
echo 's = "CoffeeScript source"' > src/file.coffee
sleep 1
git diff src/file.js
src/file.js
has been overwritten with the CoffeeScript output.
This is a new one to me, and I don't even know if this is the right repo to report this issue on?
Build Error (OneShot)
components/collapsible/index.ts: /home/runner/work/emberclear/emberclear/client/web/emberclear/components/collapsible/index.ts: unable to use this non-serializable babel config in this node process
in /tmp/broccoli-3020EI1K66U07kNx/out-02-funnel
at broccoli-persistent-filter:Babel > [Babel: @emberclear/ui] (Babel: @emberclear/ui)
from ci log: https://github.com/NullVoxPopuli/emberclear/pull/922/checks?check_run_id=746347841
on this branch: NullVoxPopuli/emberclear#922
(using v4-alpha ember-cli-typescript and embroider 0.19.0)
maybe cc @chriskrycho and @ef4?
maaaybe related? emberjs/ember-test-waiters#158
Branch | Build failing π¨ |
---|---|
Dependency | walk-sync |
Current Version | 0.3.1 |
Type | dependency |
This version is covered by your current version range and after updating it in your project the build failed.
walk-sync is a direct dependency of this project this is very likely breaking your project right now. If other packages depend on you itβs very likely also breaking them.
I recommend you give this issue a very high priority. Iβm sure you can resolve this πͺ
The new version differs by 5 commits.
16b1ec5
release v0.3.2 π
eec7313
commit yarn.lock
6d377b5
Merge pull request #31 from riegelTech/feature/add_includeBasePath_option
50a21b5
Use path separators to be more compliant with win paths
5a4fb73
Add 'includeBasePath' to options so files pathes are prefixed with baseDir path
See the full diff
There is a collection of frequently asked questions and of course you may always ask my humans.
Your Greenkeeper Bot π΄
This is slow.
6.0.2
to 6.1.0
.π¨ View failing branch.
This version is covered by your current version range and after updating it in your project the build failed.
mocha is a devDependency of this project. It might not break your production code or affect downstream projects, but probably breaks your build or test tools, which may prevent deploying or publishing.
options
parameter (@plroebuck).jsonc
extension (@sstephant)These are soft-deprecated, and will emit a warning upon use. Support will be removed in (likely) the next major version of Mocha:
this.skip()
in "before each" hooks (@juergba)--allow-uncaught
for uncaught exceptions thrown inside hooks (@givanse)and some regressions:
Suite
cloning by copying root
property (@fatso83)The new version differs by 28 commits.
f4fc95a
Release v6.1.0
bd29dbd
update CHANGELOG for v6.1.0 [ci skip]
aaf2b72
Use cwd-relative pathname to load config file (#3829)
b079d24
upgrade deps as per npm audit fix; closes #3854
e87c689
Deprecate this.skip() for "after all" hooks (#3719)
81cfa90
Copy Suite property "root" when cloning; closes #3847 (#3848)
8aa2fc4
Fix issue 3714, hide pound icon showing on hover header on docs page (#3850)
586bf78
Update JS-YAML to address security issue (#3845)
d1024a3
Update doc examples "tests.html" (#3811)
1d570e0
Delete "/docs/example/chai.js"
ade8b90
runner.js: "self.test" undefined in Browser (#3835)
0098147
Replace findup-sync with find-up for faster startup (#3830)
d5ba121
Remove "package" flag from sample config file because it can only be passes as CLI arg (#3793)
a3089ad
update package-lock
75430ec
Upgrade yargs-parser dependency to avoid loading 2 copies of yargs
There are 28 commits in total.
See the full diff
There is a collection of frequently asked questions. If those donβt help, you can always ask the humans behind Greenkeeper.
Your Greenkeeper Bot π΄
So the 3.0 release has a bug in node 10 that evidently isn't covered by the test cases.
This project is using @types/node
@^13
which didn't flag this as an issue. (I recommend we downgrade to ^10
).
According to the node.js docs, recursive rmdir was added in 12.10.0.
The API is used here: https://github.com/broccolijs/broccoli-persistent-filter/blob/master/index.ts#L228-L229
Maybe the right fix is for the fs-merger to shim the node-12 api when in node 10?
Build Canceled: Broccoli Builder ran into an error with broccoli-persistent-filter:Babel > [Babel: ember-lodash]
plugin. π₯
Worker terminated unexpectedly
Error: Worker terminated unexpectedly
at ChildProcess. (/opt/home/jenkins/workspace/_CORE-2815_wrong-question-for-US/site/src/ember/node_modules/workerpool/lib/WorkerHandler.js:181:17)
at emitTwo (events.js:106:13)
at ChildProcess.emit (events.js:191:7)
at Process.ChildProcess._handle.onexit (internal/child_process.js:215:12)
:site:emberTest FAILED
Now that we have Dependency Tracking #168, this plugin becomes much more interesting for bundler-liker build scenarios, where n
files get merged into 1 or fewer than n
files.
It would be nice, if broccoli-persistent-filter
could add a hook to reject a file from the build (similar to getDestFilePath
), removing the need for a subsequent broccoli-funnel
.
It would be nice to have an environment variable that can be used to blow all the caches and force a fresh full build. Because async-disk-cache doesn't nest under a single base dir in the os.tmpDir()
(I plan to submit a PR over there to do this), we cannot simply do rm -rf /tmp/some/path/here
(even if we knew the path).
I would like to do something like:
CLEAR_PERSISTENT_CACHE=true ember build
And have that do something like the following just before the first boot (before this):
this.processor.clear();
I'm happy to PR this, but wanted to throw it out there before I implemented to make sure there were no major objections...
I could be wrong (close if I am), but it seems like the individual tree can no longer specify its own cacheKey
. Instead it always calls hashForDep(ctx.baseDir())
(here), but sometimes you need to make a custom cacheKey
that is not related to package.json
(for example: bower dependencies).
Shall we mark these two options as optional as well?
broccoli-persistent-filter/index.ts
Lines 134 to 135 in 8e93916
I'm writing a subclass based on the broccoli-persistent-filter
in TypeScript, by now, calling super(node, options)
in the constructor
will cause an unfixable type error:
IMO, the dependencyInvalidation
, and the concurrency
options should not be required because the base class will set a default value for both of them when calling the super(node, option)
.
Currently, I'm using a workaround below:
interface Options {
name?: string;
}
interface SuperOptions extends Options {
dependencyInvalidation: boolean;
concurrency: number;
}
class MyFilter extends PersistentFilter {
constructor(node: InputNode, options: Options) {
options.name = options.name || 'my-filter';
super(node, options as SuperOptions);
}
}
Some addons (like ember-cli-deploy-build and torii) are depending on broccoli-persistent-filter
and are still supporting Node 0.12 for some reason.
Is it a good idea to release a version of broccoli-persistent-filter
which point to async-disk-cache
<=1.2.0? Or should those addon developers drop 0.12 support instead?
[Without using new hash-for-dep], I get the following errors on test (below).
They can be repaired by replacing
F.prototype.baseDir = function() {
return '../';
With
var path = require('path');
F.prototype.baseDir = function() {
return path.join(__dirname, '../');
I'll submit a patch in a second... however I have no idea what changed/is different about my env (macosx 10.11.3 node 0.12.4 ... npm 3.6.0) to cause the failures.
1) Filter persistent cache initializes cache:
Cannot find module '/Volumes/Macintosh_HD/Users/shauncutts/src/broccoli-persistent-filter/node_modules//package.json'
Error: Cannot find module 'node_modules//package.json'
at pkg (node_modules/hash-for-dep/lib/pkg.js:19:20)
at statPathsFor (node_modules/hash-for-dep/lib/stat-paths-for.js:14:20)
at hashForDep (node_modules/hash-for-dep/index.js:15:21)
at Filter.cacheKey (index.js:117:10)
at Object.module.exports.cacheKey (lib/strategies/persistent.js:22:16)
at Object.module.exports.init (lib/strategies/persistent.js:12:50)
at Processor.init (lib/processor.js:16:18)
at Filter (index.js:56:18)
at new F (test/test.js:541:14)
at Context.<anonymous> (test/test.js:564:15)
2) Filter persistent cache initializes cache using ENV variable if present:
Cannot find module '/Volumes/Macintosh_HD/Users/shauncutts/src/broccoli-persistent-filter/node_modules//package.json'
Error: Cannot find module 'node_modules//package.json'
at pkg (node_modules/hash-for-dep/lib/pkg.js:19:20)
at statPathsFor (node_modules/hash-for-dep/lib/stat-paths-for.js:14:20)
at hashForDep (node_modules/hash-for-dep/index.js:15:21)
at Filter.cacheKey (index.js:117:10)
at Object.module.exports.cacheKey (lib/strategies/persistent.js:22:16)
at Object.module.exports.init (lib/strategies/persistent.js:12:50)
at Processor.init (lib/processor.js:16:18)
at Filter (index.js:56:18)
at new F (test/test.js:541:14)
at Context.<anonymous> (test/test.js:576:15)
3) Filter persistent cache `cacheKeyProcessString` return correct first level file cache:
Cannot find module '/Volumes/Macintosh_HD/Users/shauncutts/src/broccoli-persistent-filter/node_modules//package.json'
Error: Cannot find module 'node_modules//package.json'
at pkg (node_modules/hash-for-dep/lib/pkg.js:19:20)
at statPathsFor (node_modules/hash-for-dep/lib/stat-paths-for.js:14:20)
at hashForDep (node_modules/hash-for-dep/index.js:15:21)
at Filter.cacheKey (index.js:117:10)
at Object.module.exports.cacheKey (lib/strategies/persistent.js:22:16)
at Object.module.exports.init (lib/strategies/persistent.js:12:50)
at Processor.init (lib/processor.js:16:18)
at Filter (index.js:56:18)
at new F (test/test.js:541:14)
at Context.<anonymous> (test/test.js:600:15)
4) Filter persistent cache properly reads the file tree:
Cannot find module '/Volumes/Macintosh_HD/Users/shauncutts/src/broccoli-persistent-filter/node_modules//package.json'
Error: Cannot find module 'node_modules//package.json'
at pkg (node_modules/hash-for-dep/lib/pkg.js:19:20)
at statPathsFor (node_modules/hash-for-dep/lib/stat-paths-for.js:14:20)
at hashForDep (node_modules/hash-for-dep/index.js:15:21)
at ReplaceFilter.Filter.cacheKey (index.js:117:10)
at Object.module.exports.cacheKey (lib/strategies/persistent.js:22:16)
at Object.module.exports.init (lib/strategies/persistent.js:12:50)
at Processor.init (lib/processor.js:16:18)
at ReplaceFilter.Filter (index.js:56:18)
at new ReplaceFilter (test/helpers/replacer.js:15:10)
at ReplaceFilter (test/helpers/replacer.js:12:12)
at node_modules/broccoli-test-helpers/index.js:63:29
at lib$rsvp$$internal$$initializePromise (node_modules/rsvp/dist/rsvp.js:541:9)
at new lib$rsvp$promise$$Promise (node_modules/rsvp/dist/rsvp.js:757:9)
at node_modules/broccoli-test-helpers/index.js:62:12
at Context.<anonymous> (test/test.js:611:14)
To see what happens to your code in Node.js 10, Greenkeeper has created a branch with the following changes:
.travis.yml
If youβre interested in upgrading this repo to Node.js 10, you can open a PR with these changes. Please note that this issue is just intended as a friendly reminder and the PR as a possible starting point for getting your code running on Node.js 10.
Greenkeeper has checked the engines
key in any package.json
file, the .nvmrc
file, and the .travis.yml
file, if present.
engines
was only updated if it defined a single version, not a range..nvmrc
was updated to Node.js 10.travis.yml
was only changed if there was a root-level node_js
that didnβt already include Node.js 10, such as node
or lts/*
. In this case, the new version was appended to the list. We didnβt touch job or matrix configurations because these tend to be quite specific and complex, and itβs difficult to infer what the intentions were.For many simpler .travis.yml
configurations, this PR should suffice as-is, but depending on what youβre doing it may require additional work or may not be applicable at all. Weβre also aware that you may have good reasons to not update to Node.js 10, which is why this was sent as an issue and not a pull request. Feel free to delete it without comment, Iβm a humble robot and wonβt feel rejected π€
There is a collection of frequently asked questions. If those donβt help, you can always ask the humans behind Greenkeeper.
Your Greenkeeper Bot π΄
Can we add BROCCOLI_PERSISTENT_FILTER_CACHE_ROOT
to the README?
It would be easier to find a solution when stefanpenner/async-disk-cache#35 happens.
Unfortunately, I didn't see anything in the ember documentation which could point to that issue and indicate how to not have that issue happen.
basically to support writing .map
files
It is possible today, but with hacks. It would be nicer if it was less hacky.
Following the recent updates, rebuilds now seem to be broken in my ember-cli app after a nom
:
Output after changing a file (full path abbreviated to β¦
for anonymity):
file changed helpers/in-array.js
ENOENT: no such file or directory, unlink β¦/Dashboard/tmp/output_path-WDavmjzf.tmp/helpers/in-array.js'
Error: ENOENT: no such file or directory, unlink 'β¦/Dashboard/tmp/output_path-WDavmjzf.tmp/helpers/in-array.js'
at Error (native)
at Object.fs.unlinkSync (fs.js:937:18)
at null.<anonymous> (β¦/Dashboard/node_modules/ember-suave/node_modules/broccoli-jscs/node_modules/broccoli-persistent-filter/index.js:85:12)
at β¦/Dashboard/node_modules/ember-suave/node_modules/broccoli-jscs/node_modules/broccoli-persistent-filter/node_modules/promise-map-series/index.js:11:14
at lib$rsvp$$internal$$tryCatch (β¦/Dashboard/node_modules/ember-suave/node_modules/broccoli-jscs/node_modules/broccoli-persistent-filter/node_modules/rsvp/dist/rsvp.js:493:16)
at lib$rsvp$$internal$$invokeCallback (β¦/Dashboard/node_modules/ember-suave/node_modules/broccoli-jscs/node_modules/broccoli-persistent-filter/node_modules/rsvp/dist/rsvp.js:505:17)
at β¦/Dashboard/node_modules/ember-suave/node_modules/broccoli-jscs/node_modules/broccoli-persistent-filter/node_modules/rsvp/dist/rsvp.js:1001:13
at lib$rsvp$asap$$flush (β¦/Dashboard/node_modules/ember-suave/node_modules/broccoli-jscs/node_modules/broccoli-persistent-filter/node_modules/rsvp/dist/rsvp.js:1198:9)
at doNTCallback0 (node.js:407:9)
at process._tickCallback (node.js:336:13)
Mac OS X 10.11.1 with Ember CLI 1.13.8.
investigating..
@stefanpenner what changed since v1.2.11?
The readme mentions that the persistent cache does not work "on all systems":
It is recommended that persistent re-builds is opt-in by the consumer as it does not currently work on all systems.
As tooling author, I'm trying to decide (a) whether I need to expose this option to my consumers, and (b) if so, when to recommend they disable the persistent cache.
A quick note about what systems have trouble would be helpful here. Doesn't need to be super detailed if that information doesn't exist - even just a "flakey on Windows" would work great.
more: ember-cli/ember-cli#5336 (comment)
idea:
Filter.prototype._handleFile = function(relativePath, srcDir, destDir, entry, outputPath, isChange, instrumentation) {
if (this.canProcessFile(relativePath)) {
instrumentation.processed++;
return this.processAndCacheFile(srcDir, destDir, entry, isChange, instrumentation);
} else {
instrumentation.linked++;
if (isChange) {
fs.unlinkSync(outputPath);
}
var srcPath = srcDir + '/' + relativePath;
// this try/catch exists, so we can do the less expensive more common operation first: merely copy to the target, but if we bet wrong, we can fallback to the remove then the copy. Such "deopt"....
try {
symlinkOrCopySync(srcPath, outputPath);
} catch (e) {
if (typeof e === 'object' && e !== null && e.name === 'EEXIST') {
fs.unlinkSync(outputPath); // we guessed wrong, output needs to be unlinked first
// https://github.com/ember-cli/ember-cli/issues/5336
symlinkOrCopySync(srcPath, outputPath);
} else {
throw e;
}
}
}
};
This would preserve the existing "optimistic" performance semantics, gambling that it is more common to no need to replace on create
. But there are legitimate cases where this is required, so we should actually handle it.
Typescript is picking up the .ts
files in the package instead of the .d.ts
files because they're all in the same directory together. This causes the packages that don't have types to become errors in projects that have noImplicitAny
set to true
(The rules in a .d.ts
file are different with respect to noImplicitAny
- it's not enforced there).
I know you don't like it, but it seems like the official recommendation from the typescript maintainers is that either we don't ship .ts
files or we ship the compiled output from a different directory than the sources.
The problem with not shipping the .ts
files is that sourcemaps won't work right especially with definitionSourcemaps
enabled -- even if definition sourcemaps supported inline source maps, it wouldn't work correctly in vscode.
So the options appear to be:
1a. Keep the current directory layout; disable sourcemaps; exclude *.ts
from the package.json.
1b. Same as 1a but with inline sourcemaps + sources inline.
2. Change the directory layout; keep sourcemaps enabled and keep *.ts
in the package.json.
3. Get official types into 7 packages that broccoli-persistent-filter
uses or get official @types
packages for them.
My preference is for option 2. Thoughts?
The cacheKeyProcessString()
method allows an addon to provide invalidation on a per-file basis, but this invalidation only occurs when performing the initial build against the persistent cache.
The logic for cache invalidation should not depend on which cache is being accessed.
I propose that the cache key value is added to the fs tree entries so that if the key changes, fs-tree-diff considers this to be a "change" for the file forcing it to be reprocessed (probably due to a dependency change that affects the output).
Also sufficient for my needs:
cacheKeyProcessString
is too onerous, adding a new cache key method that doesn't receive the contents of the file but is called for every update is fine.I'm using broccoli-babel-transpiler with a bunch of custom Babel plugins. Among other things, these include a wildcard module resolver to allow for things such as import "tests/**/*.spec"
- in other words, my source file depends on a glob expression, not a single file. When a new test is added to the project, or when a test file is removed, the source file containing the wildcard import (presumably /alltests.js
or similar) needs to be rebuilt.
Can I achieve this with the current dependencyInvalidation mechanism?
On first reading of the code, I don't believe the current implementation can do this, but a fix should be fairly simple. Storing glob-like dependencies in a separate inverse-map and matching changes against each registered pattern after the regular dependent lookup should be sufficient.
Is this something you would be interested in?
warning ember-cli-babel > broccoli-babel-transpiler > broccoli-persistent-filter > [email protected]:
This package is no longer supported. It's now a built-in Node module. If you've depended on crypto,
you should switch to the one that's built-in.
ember new foo
ember build
cat dist/assets/foo.js
~~~~ snip ~~~~
define('foo/router', function () {
'use strict';
undefined
});
define('foo/app', function () {
'use strict';
undefined
});
@rwjblue / @SparshithNR / @Turbo87 / @oligriffiths any thoughts/ concerns?
Branch | Build failing π¨ |
---|---|
Dependency | symlink-or-copy |
Current Version | 1.1.8 |
Type | dependency |
This version is covered by your current version range and after updating it in your project the build failed.
symlink-or-copy is a direct dependency of this project, and it is very likely causing it to break. If other packages depend on yours, this update is probably also breaking those in turn.
The new version differs by 7 commits.
dcd548f
release v1.2.0 π
cc7cff2
Make tests idempotent
d208e8a
Merge pull request #36 from garethbosch/master
1afc3e2
Removed uneeded process require that was failing for old versions of node.
0a1849e
fix #35
8725dab
Merge pull request #32 from bfred-it/patch-1
aa624a1
asynchronoukks -> asynchronous
See the full diff
There is a collection of frequently asked questions. If those donβt help, you can always ask the humans behind Greenkeeper.
Your Greenkeeper Bot π΄
If the entry in patch has a projection (which will be if file/dir is symlinked), step through the entries of projection to find if the file needs to be processed rather than symlinking it directly to the output.
Moving over from stefanpenner/async-disk-cache#2.
This would allow us to utilize a known path as the cache location, and then we can utilize Travis caching to take advantage of warm boots in CI also.
I would like https://github.com/stefanpenner/broccoli-persistent-filter/blob/master/lib/strategies/persistent.js#L15-L17 to become:
this._persistentCache = new AsyncDiskCache(ctx.constructor._persistentCacheKey, {
compression: 'deflate',
location: process.env['BROCCOLI_PERSISTENT_FILTER_CACHE_ROOT']
});
The above would pass a location
if that environment variable was set, and otherwise it would use the default (since https://github.com/stefanpenner/async-disk-cache/blob/master/index.js#L81 uses a falsey check on options.location
).
Then we could use a path that is in the CI services (both Travis and Circle support these options) cached directory listing, and get much faster CI builds...
A declarative, efficient, and flexible JavaScript library for building user interfaces.
π Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. πππ
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google β€οΈ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.