embroider-build / embroider Goto Github PK
View Code? Open in Web Editor NEWCompiling Ember apps into spec-compliant, modern Javascript.
License: MIT License
Compiling Ember apps into spec-compliant, modern Javascript.
License: MIT License
Although the v2 world has a much improved approach here, I think for performance / parity reasons v1 should not:
embroider/packages/compat/src/v1-addon.ts
Line 195 in 0c38b91
Currently, I believe only addons installed in node_modules
get transformed correctly from V1 to V2. We should support in-repo addons as well, that live in lib/
.
From @ef4:
we would need to discover that they exist and compile them to v2 format, same as other addons. Then in the output of the phase 2 build, we should put them into the app's devDependencies list and add symlinks, so that the final stage packager can treat them as regular NPM packages.
probably we can use one of the package.json features like
devDependencies: {
"your-in-repo-addon": "file:./lib/your-in-repo-addon"
}
we would still need to make the symlink, because NPM would have done that at NPM install time
they will now be able to conflict with NPM package names, but that was already kinda true, since if you had an addon directory in an in-repo addon, it's already fighting with other true NPM addons over the package name;
if we find real conflicts (where somebody already has a dep in package.json with the same name), we can even rename them. There's already machinery for remapping imports in your app code, to follow the rename.
embroider/packages/compat/src/v1-addon.ts
Line 175 in 131c7db
I believe this.addonInstance.treePaths[treeName]
should itself be the stock-tree, in what situations is that not sufficient?
Both broccoli-babel-transpiler and ember-cli-htmlbars-inline-precompile have invented their own mutually-incompatible solutions for plugin serialization.
broccoli-babel-transpiler allows a _parallelBabel
key on any value within the plugin config, which will cause that value to get replaced based on its requireFile
, buildWith
, params
, and/or useMethod
properties. Everything but requireFile
is optional.
ember-cli-htmlbars-inline-precompile allows a parallelBabel
key on only the top-level values within the plugin config, which will cause that value to get replaced based on its requireFile
, buildWith
, and params
, properties, which are all mandatory.
We're now stuck with these, but before this situation gets any worse I want to refactor both of them and embroider to share one library.
The app is depending on 7.x \w decorators, but something is going sideways.
Here is a stack trace (although I will debug more)
< Requires Babel "^7.0.0-0", but was loaded with "6.26.3". If you are sure you have a compatible version of @babel/core, it is likely that something in your build process is loading the wrong version. Inspect the stack trace of this error to look for the first entry that doesn't mention "@babel/core" or "babel-core" to see what is
calling Babel.
< at throwVersionError (/Users/spenner/l/pemberly-example-web_trunk/node_modules/@babel/helper-plugin-utils/lib/index.js:65:11)
< at Object.assertVersion (/Users/spenner/l/pemberly-example-web_trunk/node_modules/@babel/helper-plugin-utils/lib/index.js:13:11)
< at _default (/Users/spenner/l/pemberly-example-web_trunk/node_modules/@babel/plugin-proposal-decorators/lib/index.js:43:7)
< at /Users/spenner/l/pemberly-example-web_trunk/node_modules/@babel/helper-plugin-utils/lib/index.js:19:12
< at Function.memoisePluginContainer (/Users/spenner/src/embroider-build/embroider/node_modules/babel-core/lib/transformation/file/options/option-manager.js:113:13)
< at Function.normalisePlugin (/Users/spenner/src/embroider-build/embroider/node_modules/babel-core/lib/transformation/file/options/option-manager.js:146:32)
< at /Users/spenner/src/embroider-build/embroider/node_modules/babel-core/lib/transformation/file/options/option-manager.js:184:30
< at Array.map (<anonymous>)
< at Function.normalisePlugins (/Users/spenner/src/embroider-build/embroider/node_modules/babel-core/lib/transformation/file/options/option-manager.js:158:20)
< at OptionManager.mergeOptions (/Users/spenner/src/embroider-build/embroider/node_modules/babel-core/lib/transformation/file/options/option-manager.js:234:36)
< at OptionManager.init (/Users/spenner/src/embroider-build/embroider/node_modules/babel-core/lib/transformation/file/options/option-manager.js:368:12)
< at File.initOptions (/Users/spenner/src/embroider-build/embroider/node_modules/babel-core/lib/transformation/file/index.js:212:65)
< at new File (/Users/spenner/src/embroider-build/embroider/node_modules/babel-core/lib/transformation/file/index.js:135:24)
< at Pipeline.transform (/Users/spenner/src/embroider-build/embroider/node_modules/babel-core/lib/transformation/pipeline.js:46:16)
< at transpile (/Users/spenner/src/embroider-build/embroider/node_modules/babel-loader/lib/index.js:50:20)
< at Object.module.exports (/Users/spenner/src/embroider-build/embroider/node_modules/babel-loader/lib/index.js:173:20)
< ERROR in ./assets/test.js
We need a way to tell the stage3 packagers to ignore some script tags (and probably stylesheets) because some may come dynamically from elsewhere. We already ignore ones on other origins, but even same origin may need to be ignored.
This comes up immediately on classic apps for livereload.js and testem.js, which are dynamically served by middleware in ember-cli.
Most likely this should be implemented as a data-attribute on the tags, like data-embroider-ignore
. Stage 3 packagers should respect that and then strip it off.
We should expand neuterPreprocessors to cover this. This also interacts with treeForAddonTemplates, because the existing ember-cli code doesn't actually keep templates in the addon tree.
Because embroider will support node package resolution, does it follow that builds with embroider will support developing an add-on as a scoped package? Or are there other known issues with scoped packages in existing build tree steps that need to be addressed independently? (I'm trying to see what a checklist for add-ons as NPM scoped packages would look like.)
I realize this was done intentionally:
https://github.com/embroider-build/embroider/blob/master/packages/compat/src/compat-adapters/ember-decorators.ts#L8
But, I believe ember-decorators ember-data stuff is currently pay-as-you-go, but with embroider it becomes mandetory. Likely a path forward for ember-decorators that does not enforce ember-data is required.
(this was fun to debug, i couldn't figure out how ember-data was becoming a peerDependency)
There are a few addons that attempt to generate code across code type boundaries; e.g. they analyze templates and generate JS files from the information. In the current system these things are quite complicated and limited due to various constraints. Is the new system designed to ease these problems?
We need to merge the appStyles trees from all classic addons before we try to transpile the app's stylesheets. Because they might be trying to import from each other.
@ef4 but how can we see the bundles after the installation and execution of embroider? Where do they stay? how can I put one of them to load on demand?
machine:
mano git:(master) โ ember -v
ember-cli: 3.7.1
node: 8.11.4
os: darwin x64
I created a new ember app with ember new mano
, installed the embroider following the README and ran ember s
. But I have these errors.
Building into /private/tmp/embroider-workspace
Hash: 11ad6998f52a90aa172e
Version: webpack 4.29.5
Time: 2163ms
Built at: 2019-02-20 16:39:42
Asset Size Chunks Chunk Names
chunk.1c857f14af7913b1f074.js 9.72 KiB index.html [emitted] index.html
chunk.6e02e4c57a8b5ecc6e18.js 30.1 KiB tests/index.html [emitted] tests/index.html
chunk.77021d188cba9b1d6f06.js 33.5 KiB index.html~tests/index.html [emitted] index.html~tests/index.html
chunk.8c965dde9d1b54710088.js 2.95 MiB vendors~index.html~tests/index.html [emitted] vendors~index.html~tests/index.html
chunk.b9af59aa42d2ff42cc56.js 535 KiB vendors~tests/index.html [emitted] vendors~tests/index.html
index.html~tests/index.html.css 1 bytes index.html~tests/index.html [emitted] index.html~tests/index.html
vendors~index.html~tests/index.html.css 2.15 KiB vendors~index.html~tests/index.html [emitted] vendors~index.html~tests/index.html
vendors~tests/index.html.css 8.22 KiB vendors~tests/index.html [emitted] vendors~tests/index.html
Entrypoint index.html = vendors~index.html~tests/index.html.css chunk.8c965dde9d1b54710088.js index.html~tests/index.html.css chunk.77021d188cba9b1d6f06.js chunk.1c857f14af7913b1f074.js
Entrypoint tests/index.html = vendors~index.html~tests/index.html.css chunk.8c965dde9d1b54710088.js vendors~tests/index.html.css chunk.b9af59aa42d2ff42cc56.js index.html~tests/index.html.css chunk.77021d188cba9b1d6f06.js chunk.6e02e4c57a8b5ecc6e18.js
[0] multi script-loader!./ember-cli-live-reload.js script-loader!./_ember_env_.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/loader/loader.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/jquery/jquery.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/ember/ember.debug.js ./assets/mano.js ./node_modules/@embroider/synthesized-vendor/vendor/welcome-page.css ./assets/mano.css 112 bytes {index.html} [built]
[1] multi script-loader!./ember-cli-live-reload.js script-loader!./testem.js script-loader!./_ember_env_.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/loader/loader.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/jquery/jquery.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/ember/ember.debug.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/ember/ember-testing.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/monkey-patches.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/qunit/qunit.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/ember-qunit/qunit-configuration.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/qunit-dom.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/define-dummy-module.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/overwrite-qunit-dom-root-element.js ./assets/mano.js ./assets/test.js ./node_modules/@embroider/synthesized-vendor/vendor/welcome-page.css ./assets/mano.css ./node_modules/@embroider/synthesized-vendor/vendor/qunit/qunit.css ./node_modules/@embroider/synthesized-vendor/vendor/ember-qunit/test-container-styles.css 244 bytes {tests/index.html} [built]
[../../../Users/villander/Projects/mano/node_modules/script-loader/index.js!./_ember_env_.js] /Users/villander/Projects/mano/node_modules/script-loader!./_ember_env_.js 311 bytes {index.html~tests/index.html} [built]
[../../../Users/villander/Projects/mano/node_modules/script-loader/index.js!./node_modules/@embroider/synthesized-vendor/vendor/define-dummy-module.js] /Users/villander/Projects/mano/node_modules/script-loader!./node_modules/@embroider/synthesized-vendor/vendor/define-dummy-module.js 427 bytes {vendors~tests/index.html} [built]
[../../../Users/villander/Projects/mano/node_modules/script-loader/index.js!./node_modules/@embroider/synthesized-vendor/vendor/ember-qunit/qunit-configuration.js] /Users/villander/Projects/mano/node_modules/script-loader!./node_modules/@embroider/synthesized-vendor/vendor/ember-qunit/qunit-configuration.js 451 bytes {vendors~tests/index.html} [built]
[../../../Users/villander/Projects/mano/node_modules/script-loader/index.js!./node_modules/@embroider/synthesized-vendor/vendor/ember/ember-testing.js] /Users/villander/Projects/mano/node_modules/script-loader!./node_modules/@embroider/synthesized-vendor/vendor/ember/ember-testing.js 427 bytes {vendors~tests/index.html} [built]
[../../../Users/villander/Projects/mano/node_modules/script-loader/index.js!./node_modules/@embroider/synthesized-vendor/vendor/ember/ember.debug.js] /Users/villander/Projects/mano/node_modules/script-loader!./node_modules/@embroider/synthesized-vendor/vendor/ember/ember.debug.js 423 bytes {vendors~index.html~tests/index.html} [built]
[../../../Users/villander/Projects/mano/node_modules/script-loader/index.js!./node_modules/@embroider/synthesized-vendor/vendor/jquery/jquery.js] /Users/villander/Projects/mano/node_modules/script-loader!./node_modules/@embroider/synthesized-vendor/vendor/jquery/jquery.js 415 bytes {vendors~index.html~tests/index.html} [built]
[../../../Users/villander/Projects/mano/node_modules/script-loader/index.js!./node_modules/@embroider/synthesized-vendor/vendor/loader/loader.js] /Users/villander/Projects/mano/node_modules/script-loader!./node_modules/@embroider/synthesized-vendor/vendor/loader/loader.js 415 bytes {vendors~index.html~tests/index.html} [built]
[../../../Users/villander/Projects/mano/node_modules/script-loader/index.js!./node_modules/@embroider/synthesized-vendor/vendor/monkey-patches.js] /Users/villander/Projects/mano/node_modules/script-loader!./node_modules/@embroider/synthesized-vendor/vendor/monkey-patches.js 417 bytes {vendors~tests/index.html} [built]
[../../../Users/villander/Projects/mano/node_modules/script-loader/index.js!./node_modules/@embroider/synthesized-vendor/vendor/overwrite-qunit-dom-root-element.js] /Users/villander/Projects/mano/node_modules/script-loader!./node_modules/@embroider/synthesized-vendor/vendor/overwrite-qunit-dom-root-element.js 453 bytes {vendors~tests/index.html} [built]
[../../../Users/villander/Projects/mano/node_modules/script-loader/index.js!./node_modules/@embroider/synthesized-vendor/vendor/qunit-dom.js] /Users/villander/Projects/mano/node_modules/script-loader!./node_modules/@embroider/synthesized-vendor/vendor/qunit-dom.js 407 bytes {vendors~tests/index.html} [built]
[../../../Users/villander/Projects/mano/node_modules/script-loader/index.js!./node_modules/@embroider/synthesized-vendor/vendor/qunit/qunit.js] /Users/villander/Projects/mano/node_modules/script-loader!./node_modules/@embroider/synthesized-vendor/vendor/qunit/qunit.js 411 bytes {vendors~tests/index.html} [built]
[./assets/mano.css] 39 bytes {index.html~tests/index.html} [built]
[./assets/mano.js] 9.08 KiB {index.html~tests/index.html} [built]
+ 157 hidden modules
WARNING in ./node_modules/@ember/test-helpers/ember-test-helpers/wait.js 1:0-116
"export '_setupPromiseListeners' was not found in '../settled'
@ ./assets/test.js
@ multi script-loader!./ember-cli-live-reload.js script-loader!./testem.js script-loader!./_ember_env_.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/loader/loader.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/jquery/jquery.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/ember/ember.debug.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/ember/ember-testing.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/monkey-patches.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/qunit/qunit.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/ember-qunit/qunit-configuration.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/qunit-dom.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/define-dummy-module.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/overwrite-qunit-dom-root-element.js ./assets/mano.js ./assets/test.js ./node_modules/@embroider/synthesized-vendor/vendor/welcome-page.css ./assets/mano.css ./node_modules/@embroider/synthesized-vendor/vendor/qunit/qunit.css ./node_modules/@embroider/synthesized-vendor/vendor/ember-qunit/test-container-styles.css
WARNING in ./node_modules/@ember/test-helpers/ember-test-helpers/wait.js 1:0-116
"export '_teardownPromiseListeners' was not found in '../settled'
@ ./assets/test.js
@ multi script-loader!./ember-cli-live-reload.js script-loader!./testem.js script-loader!./_ember_env_.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/loader/loader.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/jquery/jquery.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/ember/ember.debug.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/ember/ember-testing.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/monkey-patches.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/qunit/qunit.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/ember-qunit/qunit-configuration.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/qunit-dom.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/define-dummy-module.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/overwrite-qunit-dom-root-element.js ./assets/mano.js ./assets/test.js ./node_modules/@embroider/synthesized-vendor/vendor/welcome-page.css ./assets/mano.css ./node_modules/@embroider/synthesized-vendor/vendor/qunit/qunit.css ./node_modules/@embroider/synthesized-vendor/vendor/ember-qunit/test-container-styles.css
ERROR in ./node_modules/ember-welcome-page/components/welcome-page.js
Module not found: Error: Can't resolve '../templates/components/welcome-page.hbs' in '/private/tmp/embroider-workspace/node_modules/ember-welcome-page/components'
@ ./node_modules/ember-welcome-page/components/welcome-page.js 2:0-62 5:2-8
@ ./assets/mano.js
@ multi script-loader!./ember-cli-live-reload.js script-loader!./_ember_env_.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/loader/loader.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/jquery/jquery.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/ember/ember.debug.js ./assets/mano.js ./node_modules/@embroider/synthesized-vendor/vendor/welcome-page.css ./assets/mano.css
ERROR in ./node_modules/@embroider/synthesized-vendor/vendor/ember/ember.debug.js ./assets/mano.js ./node_modules/@embroider/synthesized-vendor/vendor/welcome-page.css ./assets/mano.css (multi script-loader!./ember-cli-live-reload.js script-loader!./_ember_env_.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/loader/loader.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/jquery/jquery.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/ember/ember.debug.js ./assets/mano.js ./node_modules/@embroider/synthesized-vendor/vendor/welcome-page.css ./assets/mano.css)
Module not found: Error: Can't resolve '/private/tmp/embroider-workspace/ember-cli-live-reload.js' in '/private/tmp/embroider-workspace'
@ ./node_modules/@embroider/synthesized-vendor/vendor/ember/ember.debug.js ./assets/mano.js ./node_modules/@embroider/synthesized-vendor/vendor/welcome-page.css ./assets/mano.css (multi script-loader!./ember-cli-live-reload.js script-loader!./_ember_env_.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/loader/loader.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/jquery/jquery.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/ember/ember.debug.js ./assets/mano.js ./node_modules/@embroider/synthesized-vendor/vendor/welcome-page.css ./assets/mano.css) index.html[0]
ERROR in ./node_modules/@embroider/synthesized-vendor/vendor/overwrite-qunit-dom-root-element.js ./assets/mano.js ./assets/test.js ./node_modules/@embroider/synthesized-vendor/vendor/welcome-page.css ./assets/mano.css ./node_modules/@embroider/synthesized-vendor/vendor/qunit/qunit.css ./node_modules/@embroider/synthesized-vendor/vendor/ember-qunit/test-container-styles.css (multi script-loader!./ember-cli-live-reload.js script-loader!./testem.js script-loader!./_ember_env_.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/loader/loader.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/jquery/jquery.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/ember/ember.debug.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/ember/ember-testing.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/monkey-patches.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/qunit/qunit.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/ember-qunit/qunit-configuration.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/qunit-dom.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/define-dummy-module.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/overwrite-qunit-dom-root-element.js ./assets/mano.js ./assets/test.js ./node_modules/@embroider/synthesized-vendor/vendor/welcome-page.css ./assets/mano.css ./node_modules/@embroider/synthesized-vendor/vendor/qunit/qunit.css ./node_modules/@embroider/synthesized-vendor/vendor/ember-qunit/test-container-styles.css)
Module not found: Error: Can't resolve '/private/tmp/embroider-workspace/ember-cli-live-reload.js' in '/private/tmp/embroider-workspace'
@ ./node_modules/@embroider/synthesized-vendor/vendor/overwrite-qunit-dom-root-element.js ./assets/mano.js ./assets/test.js ./node_modules/@embroider/synthesized-vendor/vendor/welcome-page.css ./assets/mano.css ./node_modules/@embroider/synthesized-vendor/vendor/qunit/qunit.css ./node_modules/@embroider/synthesized-vendor/vendor/ember-qunit/test-container-styles.css (multi script-loader!./ember-cli-live-reload.js script-loader!./testem.js script-loader!./_ember_env_.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/loader/loader.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/jquery/jquery.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/ember/ember.debug.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/ember/ember-testing.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/monkey-patches.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/qunit/qunit.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/ember-qunit/qunit-configuration.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/qunit-dom.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/define-dummy-module.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/overwrite-qunit-dom-root-element.js ./assets/mano.js ./assets/test.js ./node_modules/@embroider/synthesized-vendor/vendor/welcome-page.css ./assets/mano.css ./node_modules/@embroider/synthesized-vendor/vendor/qunit/qunit.css ./node_modules/@embroider/synthesized-vendor/vendor/ember-qunit/test-container-styles.css) tests/index.html[0]
ERROR in ./node_modules/@embroider/synthesized-vendor/vendor/overwrite-qunit-dom-root-element.js ./assets/mano.js ./assets/test.js ./node_modules/@embroider/synthesized-vendor/vendor/welcome-page.css ./assets/mano.css ./node_modules/@embroider/synthesized-vendor/vendor/qunit/qunit.css ./node_modules/@embroider/synthesized-vendor/vendor/ember-qunit/test-container-styles.css (multi script-loader!./ember-cli-live-reload.js script-loader!./testem.js script-loader!./_ember_env_.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/loader/loader.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/jquery/jquery.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/ember/ember.debug.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/ember/ember-testing.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/monkey-patches.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/qunit/qunit.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/ember-qunit/qunit-configuration.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/qunit-dom.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/define-dummy-module.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/overwrite-qunit-dom-root-element.js ./assets/mano.js ./assets/test.js ./node_modules/@embroider/synthesized-vendor/vendor/welcome-page.css ./assets/mano.css ./node_modules/@embroider/synthesized-vendor/vendor/qunit/qunit.css ./node_modules/@embroider/synthesized-vendor/vendor/ember-qunit/test-container-styles.css)
Module not found: Error: Can't resolve '/private/tmp/embroider-workspace/testem.js' in '/private/tmp/embroider-workspace'
@ ./node_modules/@embroider/synthesized-vendor/vendor/overwrite-qunit-dom-root-element.js ./assets/mano.js ./assets/test.js ./node_modules/@embroider/synthesized-vendor/vendor/welcome-page.css ./assets/mano.css ./node_modules/@embroider/synthesized-vendor/vendor/qunit/qunit.css ./node_modules/@embroider/synthesized-vendor/vendor/ember-qunit/test-container-styles.css (multi script-loader!./ember-cli-live-reload.js script-loader!./testem.js script-loader!./_ember_env_.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/loader/loader.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/jquery/jquery.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/ember/ember.debug.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/ember/ember-testing.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/monkey-patches.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/qunit/qunit.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/ember-qunit/qunit-configuration.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/qunit-dom.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/define-dummy-module.js script-loader!./node_modules/@embroider/synthesized-vendor/vendor/overwrite-qunit-dom-root-element.js ./assets/mano.js ./assets/test.js ./node_modules/@embroider/synthesized-vendor/vendor/welcome-page.css ./assets/mano.css ./node_modules/@embroider/synthesized-vendor/vendor/qunit/qunit.css ./node_modules/@embroider/synthesized-vendor/vendor/ember-qunit/test-container-styles.css) tests/index.html[1]
Child mini-css-extract-plugin ../../../Users/villander/Projects/mano/node_modules/css-loader/index.js??ref--7-1!assets/mano.css:
Entrypoint mini-css-extract-plugin = *
[../../../Users/villander/Projects/mano/node_modules/css-loader/index.js?!./assets/mano.css] /Users/villander/Projects/mano/node_modules/css-loader??ref--7-1!./assets/mano.css 198 bytes {mini-css-extract-plugin} [built]
[../../../Users/villander/Projects/mano/node_modules/css-loader/lib/css-base.js] /Users/villander/Projects/mano/node_modules/css-loader/lib/css-base.js 2.21 KiB {mini-css-extract-plugin} [built]
Child mini-css-extract-plugin ../../../Users/villander/Projects/mano/node_modules/css-loader/index.js??ref--7-1!node_modules/@embroider/synthesized-vendor/vendor/ember-qunit/test-container-styles.css:
Entrypoint mini-css-extract-plugin = *
[../../../Users/villander/Projects/mano/node_modules/css-loader/index.js?!./node_modules/@embroider/synthesized-vendor/vendor/ember-qunit/test-container-styles.css] /Users/villander/Projects/mano/node_modules/css-loader??ref--7-1!./node_modules/@embroider/synthesized-vendor/vendor/ember-qunit/test-container-styles.css 788 bytes {mini-css-extract-plugin} [built]
[../../../Users/villander/Projects/mano/node_modules/css-loader/lib/css-base.js] /Users/villander/Projects/mano/node_modules/css-loader/lib/css-base.js 2.21 KiB {mini-css-extract-plugin} [built]
Child mini-css-extract-plugin ../../../Users/villander/Projects/mano/node_modules/css-loader/index.js??ref--7-1!node_modules/@embroider/synthesized-vendor/vendor/qunit/qunit.css:
Entrypoint mini-css-extract-plugin = *
[../../../Users/villander/Projects/mano/node_modules/css-loader/index.js?!./node_modules/@embroider/synthesized-vendor/vendor/qunit/qunit.css] /Users/villander/Projects/mano/node_modules/css-loader??ref--7-1!./node_modules/@embroider/synthesized-vendor/vendor/qunit/qunit.css 8.49 KiB {mini-css-extract-plugin} [built]
[../../../Users/villander/Projects/mano/node_modules/css-loader/lib/css-base.js] /Users/villander/Projects/mano/node_modules/css-loader/lib/css-base.js 2.21 KiB {mini-css-extract-plugin} [built]
Child mini-css-extract-plugin ../../../Users/villander/Projects/mano/node_modules/css-loader/index.js??ref--7-1!node_modules/@embroider/synthesized-vendor/vendor/welcome-page.css:
Entrypoint mini-css-extract-plugin = *
[../../../Users/villander/Projects/mano/node_modules/css-loader/index.js?!./node_modules/@embroider/synthesized-vendor/vendor/welcome-page.css] /Users/villander/Projects/mano/node_modules/css-loader??ref--7-1!./node_modules/@embroider/synthesized-vendor/vendor/welcome-page.css 2.45 KiB {mini-css-extract-plugin} [built]
[../../../Users/villander/Projects/mano/node_modules/css-loader/lib/css-base.js] /Users/villander/Projects/mano/node_modules/css-loader/lib/css-base.js 2.21 KiB {mini-css-extract-plugin} [built]
Build Error (PackagerRunner)
webpack returned errors to @embroider/webpack
Stack Trace and Error Report: /var/folders/0v/jpdg1flj3qscvbvt728pgt8c0000gn/T/error.dump.6c8ac724796488a63ca93ed193ef2661.log
```
['/Some/absolute/path', {}]
is a valid way to express a babel plugin, but in that case we erroneously prepend babel-plugin-
.
The spec says:
qunit typically comes from a shim in @ember/test-helpers/vendor/shims/qunit, which in turn uses globals to find code that gets dynamically incorporated via ember-qunit
but that's not quite true. The ember-qunit
package provides the necessary code for the qunit
module (https://github.com/emberjs/ember-qunit/tree/v3.5.1/addon-test-support/qunit).
There's currently a todo(
Found a babel plugin that we couldn't deal with);
We can wrap up these non-serializable ones using shared global state and forcing JOBS to 1.
@embroider/webpack
uses script-loader
because many of our classic app.import
ed files are truly scripts that should execute in a script context, not modules that should execute in a module context.
But script-loader is pretty limited. It packs your code as a string and evals it (even in production mode), which is likely to run afoul of strict CSP rules, and may have some performance impact since it shifts when parsing happens.
It also doesn't support minification at all. And while we could layer that in without much difficulty, given the other issues I think it's better to just move away from script-loader.
I suspect these files should just sidestep webpack entirely, as script context is very much against-the-grain of webpack.
An app using https://github.com/rwjblue/ember-angle-bracket-invocation-polyfill in an ember version that doesn't need the polyfill ended up with { "app-js": "_app_" }
in package.json but that directory wasn't present in the build.
There should either be an empty directory in the stage1 build output, or we should not emit the app-js
key.
speaking to @Turbo87, he mentioned issues using this add-on: ember-cli-inline-content. So I am posting it here, so we don't forget to identify/fix the issue
Any addon that applies custom AST transforms to itself needs to run those transforms during the stage1 build, as detailed in SPEC.md. That feature is still missing.
An example of where this breaks apps is that ember-basic-dropdown uses ember-maybe-in-element, which is implemented as an AST transform. If you get A component or helper named "maybe-in-element" could not be found
, this is why.
The spec says:
@ember/component really comes from ember-cli-shims/vendor/ember-cli-shims/app-shims, which uses globals to find the real code in ember-source.
but that's actually not quite true. The @ember/component
import at the moment is transpiled away by ember-cli-babel
and convert into an Ember
global access. ember-cli-shims
has been removed from the default blueprints.
We emit shim modules to connect build-time resolved modules with runtime modules that we can't prove aren't needed. They will necessarily get flattened into the runtime AMD namespace, so we should definitely not emit multiple shims that target the same name.
For max compat, we should copy ember-cli's existing priority order here.
Addons that are engines have a config/environment that needs the same handling we already give to app's config/environment.
First of all, thanks a lot for taking this effort. I would like to try this on my own ember app, but I can't seem to find any instructions on how to use this to build my ember app?
Do I use this like an addon, is this available as part of an ember-cli unstable build? may be a link to some sample repo using this would be nice.
I'm evaluating babel-plugin-macros as a possible standardized solution for our build-time configuration needs.
The idea would be that the addon spec would explicitly allow addons to have usages of babel-plugin-macros in their published code, and we guarantee that the macros will run during the app build.
I think it meets our needs and means we don't need to write much custom infrastructure, other than possibly having some nice sets of pre-made macros for common things, like conditionally including a block of code based on the host ember version.
But I have identified one major challenge, which is babel caching. In general, caching is clearly a feature that belongs in babel core, and they have mentioned having it on their roadmap, but it doesn't appear to be imminent. In ember-cli, we rely on the custom scheme in broccoli-babel-transpiler that lets babel plugins expose cache key information. But this scheme can't cover the things that babel-plugin-macros do.
As a motivating example, consider a usage of the preval
macro:
import preval from 'babel-plugin-preval/macro';
const enableFeature = preval`module.exports = Boolean(process.env.ENABLE_IT)`;
The only babel plugin in the actual babel config here would be babel-plugin-macros
. It's not until after that plugin transpiles this file that it even knows the preval
macro is in use, and even then it doesn't really have any visibility into what external data should invalidate the cache.
This problem is more general than just babel-plugin-macros, and even if we don't choose to adopt it this same problem is going to crop up for any babel plugin that can do the kind of build-time code modification that we want to support.
I went looking at how other projects solve this problem, since babel-plugin-macros
is relatively popular. create-react-app
includes it by default. Their solution is ugly but works. They apply a string-based heuristic to source code files to see if macros might be in use, and any file that might have macros is excluded entirely from caching. The heuristic does not have false negatives (it always detects true macro usage, because macros follow a strict naming convention) but it has false positives (because people could use the word "macro"
for other things.
We could do that too, or we could do a slightly more sophisticated thing if we allowed babel plugins to tell us after processing a given file that file file should be volatile (meaning not safe to cache). This would eliminate the false positives.
I'm not particularly worried about the performance impact of disabling caching for specific files, because I don't expect most files to need macros and you can always choose to structure your code so that most of it is in files that don't have macros, and some small macro-containing files import the different implementations.
This issue raises to level of something that we'll want to solve in both the existing ember-cli toolchain (meaning broccoli-babel-transpiler) and in embroider, because we will want addon authors to be able to target both.
I see three levels of solutions, in rising complexity:
Adopt the same string-based heuristic as create-react-app. It's simple and it gives you correct builds, at the cost of not caching some things that might have actually been cacheable.
Extend our babel-plugin caching scheme so that plugins can inform us after processing a file that the file should be treated as volatile. This scopes down the cost a little as we won't have false positives and we'll only make truly macro-using files volatile. We would need to PR babel-plugin-macros to expose this feature, and maintain a fork if they don't care about it
Extend our caching scheme even further so that macro authors themselves would have a protocol for describing cacheability. This would make it possible to write macros that don't opt out of caching entirely, but it wouldn't help with the most general purpose macros like preval
or codegen
, and it's pretty nice to use those ones.
IMO, I think option 1 is sufficient if we can get consensus to implement it in broccoli-babel-transpiler. Either directly (which would be easier, but would cause broccoli-babel-transpiler to have a weird level of knowledge about babel-plugin-macros in particular) or by adding some new hook that babel plugin authors can use to control this behavior (which would require us to fork or wrap babel-plugin-macros to use said hook).
Apparently sometimes people pass absolute paths to app.import
. At the moment we rewrite those incorrectly like /Some/absolute -> .//Some/absolute
Currently, Embroider has a Babel plugin that rewrites all imports of template files to include the .hbs
suffix, so import template from '../../templates/my-component'
becomes import template from '../../templates/my-component.hbs'
.
Unfortunately, this currently relies on detecting /templates/
in the import path to know that the type being imported is a template. We should instead provide the Babel plugin a list of template files ahead of time, so it can append the suffix correctly, no matter what the import path.
Motivating addon: ember-collapsible-panel
, where component files do import template from './template'
: https://github.com/embermap/ember-collapsible-panel/blob/master/addon/components/cp-panel/component.js#L6
I'm using embroider 0.0.8 in my app. I have this error
โ web_app git:(staging) โ ember s
Cannot stop: not the current node.
Build Error (OneShot)
Build Canceled: Broccoli Builder ran into an error with `Rollup` plugin. ๐ฅ
Could not resolve '../../../-debug' from tmp/rollup-cache_path-OzrZ2oRb.tmp/build/-private/system/references/belongs-to.js
Stack Trace and Error Report: /var/folders/0v/jpdg1flj3qscvbvt728pgt8c0000gn/T/error.dump.f9e550f228f39a54667691efaab0d6b6.log
https://github.com/embroider-build/embroider/blob/master/SPEC.md#package-public-api-overview talks about several kinds of assets. WebAssembly will likely become much more relevant in the future, but is not mentioned in this list at all.
In packageRules
, you can already declare that a given module dependsOnComponents
, and this will resolve the components to their corresponding files and add imports for them and call window.define()
for them so that they will be fully compatible with existing ember code.
But dependsOnModules
just synthesizes the import. It should also call window.define()
but doesn't. There's not much point is only synthesizing the import, as this feature exists to achieve compatible with existing code that expects to use the AMD loader.
https://github.com/embroider-build/embroider/blob/master/packages/core/src/package-cache.ts#L10-L14
That way all our addons can use the same algo + share the same cache.
When reading https://github.com/embroider-build/embroider/blob/master/SPEC.md#package-hooks I thought: ember-addon.build
is basically the same as ember-addon.main
, just with ES6 code instead. Later the spec mentions a possible shim layer which would explain the difference between the two. A crosslink here might be useful to avoid unnecessary questions.
Building into /private/var/folders/6y/_8qpkt114jzb442txt_9w_2c0000gn/T/embroider-cjbPbI
WARNING: Your build is slower because some babel plugins are non-serializable []
I suppose the above warning was supposed to include the names of the plugins that are not serializable, but apparently this was not the case. Is there another way to find out what went wrong here?
https://github.com/embroider-build/embroider/blob/master/SPEC.md#assets mentions that assets from addons get namespaced. What happens if the addon is included twice in the build with different versions?
The addon test support rewriter can error when an addon emits my-name.js
and doesn't have a my-name
directory.
ember-cli-qunit 4.4.0 reproduces this behavior.
Build Error (WaitForTrees)
Cannot find module './@linkedin/artdeco-button.css' from '/private/tmp/embroider-workspace/node_modules/@linkedin/artdeco-button'
Specifically:
embroider/packages/core/src/app.ts
Line 195 in 118c7bf
Is attempting to use the node resolution algorithm, but the intended staged target of @linkedin/artdeco-button
residing in /private/tmp/embroider-workspace/node_modules/@linkedin/@artdeco-button
is not resolvable, as it has no resolvable main.
As it's package.json
main
property is empty, the resolution algorithm will attempt to tr3eat @linkedin/artdeco-button/index.js
as it's implicit main, but as that file is not present, the resolution algorithm assumes a miss and moves on.
It is worth pointing out that @linkedin/artdeco-button/index.scss
does exist, but that file is not considered by the node resolution algorithm.
I think i have a vague idea of what your goal is here, but it isn't sufficiently crisp to suggest a path forward. We should likely sync up.
=================================================================================
ENV Summary:
TIME: Sun Feb 24 2019 12:55:25 GMT-0800 (Pacific Standard Time)
TITLE: ember
ARGV:
- /Users/spenner/.gradle/pemberly/node-v10.6.0-darwin-x64/bin/node
- /Users/spenner/.config/node/default/bin/ember
- b
EXEC_PATH: /Users/spenner/.gradle/pemberly/node-v10.6.0-darwin-x64/bin/node
TMPDIR: /var/folders/4r/whc65vwj1xggvvky3yy1cp9m000mw4/T
SHELL: /usr/local/bin/fish
PATH:
- /Users/spenner/.gradle/pemberly/yarnpkg-1.13.0/bin
- /Users/spenner/.gradle/pemberly/node-v10.6.0-darwin-x64/bin
- /Users/spenner/l/pemberly-example-web_trunk/.gradle/pemberly
- /Users/spenner/.cargo/bin
- /Users/spenner/.fzf/bin
- /Users/spenner/.local/bin
- /Applications/Racket v7.1/bin/
- /Users/spenner/.config/node/default/bin
- /usr/local/bin
- /usr/bin
- /bin
- /usr/sbin
- /sbin
- /usr/local/linkedin/bin
- /Applications/VMware
- Fusion.app/Contents/Public
- /export/content/linkedin/bin
- /Applications/Wireshark.app/Contents/MacOS
- /Users/spenner/.local/bin
- /Applications/Racket v7.1/bin/
- /Users/spenner/.config/node/default/bin
PLATFORM: darwin x64
FREEMEM: 2144165888
TOTALMEM: 17179869184
UPTIME: 1119779
LOADAVG: 2.14306640625,1.88232421875,1.93408203125
CPUS:
- Intel(R) Core(TM) i7-7920HQ CPU @ 3.10GHz - 3100
- Intel(R) Core(TM) i7-7920HQ CPU @ 3.10GHz - 3100
- Intel(R) Core(TM) i7-7920HQ CPU @ 3.10GHz - 3100
- Intel(R) Core(TM) i7-7920HQ CPU @ 3.10GHz - 3100
- Intel(R) Core(TM) i7-7920HQ CPU @ 3.10GHz - 3100
- Intel(R) Core(TM) i7-7920HQ CPU @ 3.10GHz - 3100
- Intel(R) Core(TM) i7-7920HQ CPU @ 3.10GHz - 3100
- Intel(R) Core(TM) i7-7920HQ CPU @ 3.10GHz - 3100
ENDIANNESS: LE
VERSIONS:
- ares: 1.14.0
- cldr: 33.0
- http_parser: 2.8.0
- icu: 61.1
- modules: 64
- napi: 3
- nghttp2: 1.32.0
- node: 10.6.0
- openssl: 1.1.0h
- tz: 2018c
- unicode: 10.0
- uv: 1.21.0
- v8: 6.7.288.46-node.13
- zlib: 1.2.11
ERROR Summary:
- broccoliBuilderErrorStack: Error: Cannot find module './@linkedin/artdeco-button.css' from '/private/tmp/embroider-workspace/node_modules/@linkedin/artdeco-button'
at Function.module.exports [as sync] (/Users/spenner/src/embroider-build/embroider/node_modules/resolve/lib/sync.js:58:15)
at AppBuilder.impliedAddonAssets (/Users/spenner/src/embroider-build/embroider/packages/core/src/app.js:109:51)
at AppBuilder.impliedAssets (/Users/spenner/src/embroider-build/embroider/packages/core/src/app.js:84:27)
at AppBuilder.insertEmberApp (/Users/spenner/src/embroider-build/embroider/packages/core/src/app.js:150:35)
at AppBuilder.prepareAsset (/Users/spenner/src/embroider-build/embroider/packages/core/src/app.js:196:18)
at AppBuilder.prepareAssets (/Users/spenner/src/embroider-build/embroider/packages/core/src/app.js:206:18)
at AppBuilder.updateAssets (/Users/spenner/src/embroider-build/embroider/packages/core/src/app.js:270:27)
at AppBuilder.build (/Users/spenner/src/embroider-build/embroider/packages/core/src/app.js:324:38)
at WaitForTrees.wait_for_trees_1.default [as buildHook] (/Users/spenner/src/embroider-build/embroider/packages/core/src/build-stage.js:37:31)
at process._tickCallback (internal/process/next_tick.js:68:7)
- code: [undefined]
- codeFrame: Cannot find module './@linkedin/artdeco-button.css' from '/private/tmp/embroider-workspace/node_modules/@linkedin/artdeco-button'
- errorMessage: Cannot find module './@linkedin/artdeco-button.css' from '/private/tmp/embroider-workspace/node_modules/@linkedin/artdeco-button'
at WaitForTrees (@embroider/compat/app)
-~- created here: -~-
at new Plugin (/Users/spenner/src/embroider-build/embroider/node_modules/broccoli-plugin/index.js:7:31)
at new WaitForTrees (/Users/spenner/src/embroider-build/embroider/packages/core/src/wait-for-trees.js:30:9)
at CompatApp.get tree (/Users/spenner/src/embroider-build/embroider/packages/core/src/build-stage.js:26:16)
at CompatApp.<anonymous> (/Users/spenner/src/embroider-build/embroider/node_modules/typescript-memoize/dist/memoize-decorator.js:67:52)
at new PackagerRunner (/Users/spenner/src/embroider-build/embroider/packages/core/src/to-broccoli-plugin.js:11:26)
at Object.defaultPipeline [as compatBuild] (/Users/spenner/src/embroider-build/embroider/packages/compat/src/default-pipeline.js:28:12)
at module.exports (/Users/spenner/l/pemberly-example-web_trunk/ember-cli-build.js:57:39)
at Builder.readBuildFile (/Users/spenner/l/pemberly-example-web_trunk/node_modules/ember-cli/lib/models/builder.js:52:14)
at Builder.setupBroccoliBuilder (/Users/spenner/l/pemberly-example-web_trunk/node_modules/ember-cli/lib/models/builder.js:66:22)
at new Builder (/Users/spenner/l/pemberly-example-web_trunk/node_modules/ember-cli/lib/models/builder.js:32:10)
at BuildTask.run (/Users/spenner/l/pemberly-example-web_trunk/node_modules/ember-cli/lib/tasks/build.js:15:19)
at Promise.resolve.then (/Users/spenner/l/pemberly-example-web_trunk/node_modules/ember-cli/lib/models/command.js:243:46)
at tryCatcher (/Users/spenner/l/pemberly-example-web_trunk/node_modules/ember-cli/node_modules/rsvp/dist/rsvp.js:323:19)
at invokeCallback (/Users/spenner/l/pemberly-example-web_trunk/node_modules/ember-cli/node_modules/rsvp/dist/rsvp.js:495:31)
at /Users/spenner/l/pemberly-example-web_trunk/node_modules/ember-cli/node_modules/rsvp/dist/rsvp.js:559:14
at flush (/Users/spenner/l/pemberly-example-web_trunk/node_modules/ember-cli/node_modules/rsvp/dist/rsvp.js:2402:5)
at process._tickCallback (internal/process/next_tick.js:61:11)
-~- (end) -~-
- errorType: Build Error
- location:
- column: [undefined]
- file: [undefined]
- line: [undefined]
- treeDir: [undefined]
- message: Cannot find module './@linkedin/artdeco-button.css' from '/private/tmp/embroider-workspace/node_modules/@linkedin/artdeco-button'
at WaitForTrees (@embroider/compat/app)
-~- created here: -~-
at new Plugin (/Users/spenner/src/embroider-build/embroider/node_modules/broccoli-plugin/index.js:7:31)
at new WaitForTrees (/Users/spenner/src/embroider-build/embroider/packages/core/src/wait-for-trees.js:30:9)
at CompatApp.get tree (/Users/spenner/src/embroider-build/embroider/packages/core/src/build-stage.js:26:16)
at CompatApp.<anonymous> (/Users/spenner/src/embroider-build/embroider/node_modules/typescript-memoize/dist/memoize-decorator.js:67:52)
at new PackagerRunner (/Users/spenner/src/embroider-build/embroider/packages/core/src/to-broccoli-plugin.js:11:26)
at Object.defaultPipeline [as compatBuild] (/Users/spenner/src/embroider-build/embroider/packages/compat/src/default-pipeline.js:28:12)
at module.exports (/Users/spenner/l/pemberly-example-web_trunk/ember-cli-build.js:57:39)
at Builder.readBuildFile (/Users/spenner/l/pemberly-example-web_trunk/node_modules/ember-cli/lib/models/builder.js:52:14)
at Builder.setupBroccoliBuilder (/Users/spenner/l/pemberly-example-web_trunk/node_modules/ember-cli/lib/models/builder.js:66:22)
at new Builder (/Users/spenner/l/pemberly-example-web_trunk/node_modules/ember-cli/lib/models/builder.js:32:10)
at BuildTask.run (/Users/spenner/l/pemberly-example-web_trunk/node_modules/ember-cli/lib/tasks/build.js:15:19)
at Promise.resolve.then (/Users/spenner/l/pemberly-example-web_trunk/node_modules/ember-cli/lib/models/command.js:243:46)
at tryCatcher (/Users/spenner/l/pemberly-example-web_trunk/node_modules/ember-cli/node_modules/rsvp/dist/rsvp.js:323:19)
at invokeCallback (/Users/spenner/l/pemberly-example-web_trunk/node_modules/ember-cli/node_modules/rsvp/dist/rsvp.js:495:31)
at /Users/spenner/l/pemberly-example-web_trunk/node_modules/ember-cli/node_modules/rsvp/dist/rsvp.js:559:14
at flush (/Users/spenner/l/pemberly-example-web_trunk/node_modules/ember-cli/node_modules/rsvp/dist/rsvp.js:2402:5)
at process._tickCallback (internal/process/next_tick.js:61:11)
-~- (end) -~-
- name: BuildError
- nodeAnnotation: @embroider/compat/app
- nodeName: WaitForTrees
- originalErrorMessage: Cannot find module './@linkedin/artdeco-button.css' from '/private/tmp/embroider-workspace/node_modules/@linkedin/artdeco-button'
- stack: Error: Cannot find module './@linkedin/artdeco-button.css' from '/private/tmp/embroider-workspace/node_modules/@linkedin/artdeco-button'
at Function.module.exports [as sync] (/Users/spenner/src/embroider-build/embroider/node_modules/resolve/lib/sync.js:58:15)
at AppBuilder.impliedAddonAssets (/Users/spenner/src/embroider-build/embroider/packages/core/src/app.js:109:51)
at AppBuilder.impliedAssets (/Users/spenner/src/embroider-build/embroider/packages/core/src/app.js:84:27)
at AppBuilder.insertEmberApp (/Users/spenner/src/embroider-build/embroider/packages/core/src/app.js:150:35)
at AppBuilder.prepareAsset (/Users/spenner/src/embroider-build/embroider/packages/core/src/app.js:196:18)
at AppBuilder.prepareAssets (/Users/spenner/src/embroider-build/embroider/packages/core/src/app.js:206:18)
at AppBuilder.updateAssets (/Users/spenner/src/embroider-build/embroider/packages/core/src/app.js:270:27)
at AppBuilder.build (/Users/spenner/src/embroider-build/embroider/packages/core/src/app.js:324:38)
at WaitForTrees.wait_for_trees_1.default [as buildHook] (/Users/spenner/src/embroider-build/embroider/packages/core/src/build-stage.js:37:31)
at process._tickCallback (internal/process/next_tick.js:68:7)
=================================================================================
Not sure if I've missed something in the layout, but I'm curious how you've been testing as there don't seem to be tests in the repo at all...
Currently the stage2 app build touches all the files on every incremental build, which probably deoptimizes rebuild performance in the stage 3 packager. We can optimize to leave unchanged files untouched.
We are accidentally causing broccoli to watch the whole project root.
See v1-app.js. The rootTree
getter is too broad, each place that is building off it should create its own narrower WatchedTree.
https://github.com/simplabs/ember-test-selectors is an example of an addon that does two entirely different things based on whether it is running in debug or in production mode. It is unclear to me at this point how an addon like that could be implemented using the proposed format.
We can use something like https://github.com/ztoben/assets-webpack-plugin instead of directly going through the webpack output.
We're emitting some links in HTML that are relative (like 'assets/thing.js'). This breaks on deeper routes when using History Location routing (the default Ember routing). All links must be at least root relative (like '/assets/thing.js').
@eldeffo on twitter raised some good examples: https://twitter.com/eldeffo/status/1105989202653728769
The current plan of record should handle the use-cases he described, but I wanted to open an issue so we can ensure we explicitly test these scenarios.
We need to give people instructions on how to address addon duplicates.
I started a tool in the dedupe branch that can give a pretty good summary of which relevant things are duplicated and why. Probably it should have a mode where it can pick the same "winner" that classic ember-cli would have picked, and then either emit yarn resolutions (which is nice because once you have them they stick around using nothing but normal workflow) or rewrite your node_modules (which would need to be done each time after you run npm or yarn, but which lets us do finer-grained deduplication via symlinks).
By "finer grained deduplication" I mean we can make sure there's no more than one copy of the same library version, even if the consumers of it don't share any single node_modules level in the hierarchy.
Apologies if this is already covered, I just wanted to get this down so I don't forget.
Ember's JS module API follows a set of rules to help make them more consistent and easier to remember. In particular, classes are intended to be a default export, while things like helper functions should be named exports. Given that a single package may have multiple classes, Ember uses nested modules (e.g. import MapWithDefault from '@ember/map/with-default'
).
Naturally, addons may want to follow this style, particularly "first-party" addons like Ember Data. We should make sure we have an answer for how addons can provide something like import JSONAdapter from '@ember-data/adapter/json'
conveniently. It would not be ideal to require users to have to import from paths like @ember-data/adapter/src/data/adapters/json
.
cc @runspired
I get an error when running ember serve
in an app that has an addon that exports sass styles.
The addon has addon/styles/addon.scss
(which is empty). The actual styles are in the app
folder.
In /Users/ilya/workspace/build/tmp/sass_compiler-input_base_path-14F44Vcb.tmp
there is a single _app_styles_
folder and that has all files from someaddon/app/styles/
.
File not found: /addon.scss
in any of the following include paths:
/Users/ilya/workspace/build/tmp/sass_compiler-input_base_path-14F44Vcb.tmp
at OneShot
-~- created here: -~-
at new Plugin (/Users/ilya/workspace/build/node_modules/broccoli-plugin/index.js:7:31)
at new OneShot (/Users/ilya/workspace/build/node_modules/@embroider/compat/src/one-shot.js:14:9)
at Object.cachedBuildCompatAddon [as default] (/Users/ilya/workspace/build/node_modules/@embroider/compat/src/build-compat-addon.js:15:16)
at CompatAddons.movedAddons.map.oldPkg (/Users/ilya/workspace/build/node_modules/@embroider/compat/src/compat-addons.js:33:105)
at Array.map (<anonymous>:null:null)
at new CompatAddons (/Users/ilya/workspace/build/node_modules/@embroider/compat/src/compat-addons.js:33:63)
at Object.defaultPipeline [as compatBuild] (/Users/ilya/workspace/build/node_modules/@embroider/compat/src/default-pipeline.js:11:18)
at module.exports (/Users/ilya/workspace/build/ember-cli-build.js:50:39)
at Builder.readBuildFile (/Users/ilya/workspace/build/node_modules/ember-cli/lib/models/builder.js:52:14)
at Builder.setupBroccoliBuilder (/Users/ilya/workspace/build/node_modules/ember-cli/lib/models/builder.js:66:22)
at new Builder (/Users/ilya/workspace/build/node_modules/ember-cli/lib/models/builder.js:32:10)
at ServeTask.run (/Users/ilya/workspace/build/node_modules/ember-cli/lib/tasks/serve.js:45:55)
at Promise.resolve.then (/Users/ilya/workspace/build/node_modules/ember-cli/lib/models/command.js:243:46)
at tryCatcher (/Users/ilya/workspace/build/node_modules/ember-cli/node_modules/rsvp/dist/rsvp.js:323:19)
at invokeCallback (/Users/ilya/workspace/build/node_modules/ember-cli/node_modules/rsvp/dist/rsvp.js:495:31)
at /Users/ilya/workspace/build/node_modules/ember-cli/node_modules/rsvp/dist/rsvp.js:559:14
at flush (/Users/ilya/workspace/build/node_modules/ember-cli/node_modules/rsvp/dist/rsvp.js:2402:5)
at processTicksAndRejections (internal/process/next_tick.js:74:9)
After #19 was fixed, I now get the following error:
ERROR in ./tests/integration/components/my-awesome-component-test.js
Module build failed (from /Users/josemarluedke/code/tmp/my-embroider-test/node_modules/thread-loader/dist/cjs.js):
Thread Loader (Worker 0)
/private/tmp/embroider-workspace/tests/integration/components/my-awesome-component-test.js: precompile is not a function
at compileTemplate (/Users/josemarluedke/code/tmp/my-embroider-test/node_modules/babel-plugin-htmlbars-inline-precompile/index.js:11:61)
at PluginPass.TaggedTemplateExpression (/Users/josemarluedke/code/tmp/my-embroider-test/node_modules/babel-plugin-htmlbars-inline-precompile/index.js:53:38)
at newFn (/Users/josemarluedke/code/tmp/my-embroider-test/node_modules/babel-traverse/lib/visitors.js:276:21)
at NodePath._call (/Users/josemarluedke/code/tmp/my-embroider-test/node_modules/babel-traverse/lib/path/context.js:76:18)
at NodePath.call (/Users/josemarluedke/code/tmp/my-embroider-test/node_modules/babel-traverse/lib/path/context.js:48:17)
at NodePath.visit (/Users/josemarluedke/code/tmp/my-embroider-test/node_modules/babel-traverse/lib/path/context.js:105:12)
at TraversalContext.visitQueue (/Users/josemarluedke/code/tmp/my-embroider-test/node_modules/babel-traverse/lib/context.js:150:16)
at TraversalContext.visitMultiple (/Users/josemarluedke/code/tmp/my-embroider-test/node_modules/babel-traverse/lib/context.js:103:17)
at TraversalContext.visit (/Users/josemarluedke/code/tmp/my-embroider-test/node_modules/babel-traverse/lib/context.js:190:19)
at Function.traverse.node (/Users/josemarluedke/code/tmp/my-embroider-test/node_modules/babel-traverse/lib/index.js:114:17)
@ ./assets/test.js 187:0-71
Build Error (PackagerRunner)
webpack returned errors to @embroider/webpack
A reproduction can be found here at SHA 12253f7
.
Let me know if this report doesn't help.
https://github.com/embroider-build/embroider/blob/master/SPEC.md#own-javascript mentions that by default npm dependencies should not be transpiled. As I had already written in embroider-build/ember-auto-import#41, I believe that we should apply ES latest to ES target by default for npm dependencies as many of them now target Node.js 8 or 10, which supports a lot ES features than some of the relevant browsers.
The spec mentions:
Double transpilation is not safe in general, since choices get made about how to map between modules, AMD, UMD, etc.
I don't understand this part. I agree that double transpilation of module systems is a problem, but transpiling all other syntax to ES target syntax does not appear problematic to me. Am I missing something?
invokeOriginalTreeFor
https://github.com/ember-cli/ember-cli/blob/3697ad826efa4312fc30bec27cc4d8ff97c53b5c/lib/models/addon.js#L635
https://github.com/ember-cli/calculate-cache-key-for-tree
This is a placeholder issue, that I need to flesh out yet. (don't want us to forget)
ERROR Summary:
- broccoliBuilderErrorStack: [undefined]
- code: [undefined]
- codeFrame: [undefined]
- errorMessage: Funnel: Expected Broccoli node, got null for inputNodes[0]
- errorType: [undefined]
- location:
- column: [undefined]
- file: [undefined]
- line: [undefined]
- message: Funnel: Expected Broccoli node, got null for inputNodes[0]
- name: TypeError
- nodeAnnotation: [undefined]
- nodeName: [undefined]
- originalErrorMessage: [undefined]
- stack: TypeError: Funnel: Expected Broccoli node, got null for inputNodes[0]
at Funnel.Plugin (C:\Users\lifeart\Documents\repos\ts-test\node_modules\broccoli-plugin\index.js:23:13)
at new Funnel (C:\Users\lifeart\Documents\repos\ts-test\node_modules\broccoli-funnel\index.js:57:10)
at V1App.combinedVendor (C:\Users\lifeart\Documents\repos\ts-test\node_modules\@embroider\compat\src\v1-app.js:269:13)
at V1App.synthesizeVendorPackage (C:\Users\lifeart\Documents\repos\ts-test\node_modules\@embroider\compat\src\v1-app.js:299:67)
at CompatAddons.getVendorPackage (C:\Users\lifeart\Documents\repos\ts-test\node_modules\@embroider\compat\src\compat-addons.js:77:22)
at new CompatAddons (C:\Users\lifeart\Documents\repos\ts-test\node_modules\@embroider\compat\src\compat-addons.js:34:32)
at Object.defaultPipeline [as compatBuild] (C:\Users\lifeart\Documents\repos\ts-test\node_modules\@embroider\compat\src\default-pipeline.js:11:18)
at module.exports (C:\Users\lifeart\Documents\repos\ts-test\ember-cli-build.js:17:38)
at Builder.readBuildFile (C:\Users\lifeart\Documents\repos\ts-test\node_modules\ember-cli\lib\models\builder.js:52:14)
at Builder.setupBroccoliBuilder (C:\Users\lifeart\Documents\repos\ts-test\node_modules\ember-cli\lib\models\builder.js:66:22)
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.