Skip to content
This repository has been archived by the owner on Jun 15, 2023. It is now read-only.

[WIP] - Switch to Rollup #895

Closed
wants to merge 4 commits into from
Closed

[WIP] - Switch to Rollup #895

wants to merge 4 commits into from

Conversation

Florian-R
Copy link
Contributor

@Florian-R Florian-R commented Nov 16, 2016

This is one should fixes #894. For now, all tests explode because I couldn't figure a way to compile the code correctly with grunt-mocha-test, but I'd like to grab early comments.

TBD:

  • Fix tests
  • Tests on real world app to see it fixes Brunch and Gulp issues
  • Check for deps require
  • Check bundle size - Generated with grunt-compare-size :
-255216 build/chaplin.js
-4992 build/chaplin.min.js
  • If possible, get rid of coffee extensions (see inline comments)
  • Check if coverage is still OK.

cc @embs @shvaikalesh

This was not needed, the coverage already provide this hooks.
@@ -3,9 +3,9 @@
_ = require 'underscore'
Backbone = require 'backbone'
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've just stumble upon the external option of rollup, I'll change this one in a future commit

CollectionView
Layout
View
}
Copy link
Contributor Author

@Florian-R Florian-R Nov 16, 2016

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not super fluent with ES6 modules, almost always used CommonJS. Cannot find a way have the import inlined in the export as were the require. Let me know if this could be done in a nicer way.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ES6 modules can do export { foo } from 'bar.coffee', but that won't help here. Furthermore, we should be careful not break CommonJS users because of default thing.

'coffee-script/register'
'coffee-coverage/register-istanbul'
'babel-register'
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tests breaks, because we babel-register had a extension hook but it expect .js file.

A simpler approach could be compile our files before running test in a tmp dir, but it may breaks coverage and will be slower and dirtier.

@@ -1,23 +1,43 @@
'use strict'

import Application from './chaplin/application.coffee'
Copy link
Contributor Author

@Florian-R Florian-R Nov 16, 2016

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Had to keep extensions, else rollup doesn't resolve the files. See rollup/rollup#1052 (comment). Let me know if your cool with this, else I'll try to use rollup-plugin-node-resolve.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we should give rollup-plugin-node-resolve a try, .coffee does not look very nice to me.

@paulmillr
Copy link
Contributor

👍

@Florian-R
Copy link
Contributor Author

Added some commits, I got rid of the coffee extensions, and cleaned remaining require.

I've updated my first post, the bundle is way smaller (didn't check gzip tough).

I'd work on getting the tests to pass, in the meantime, @embs could you do a quick check with my rollup-build branch and confirm it fixes your gulp setup? I can confirm this one works fine with Brunch.

@shvaikalesh
Copy link
Contributor

Outstanding job, @Florian-R! Code looks so much better now.

@@ -106,7 +106,7 @@ module.exports = class Application
# is a replacement for Backbone.Router and *does not inherit from it*
# directly. It's a different implementation with several advantages over
# the standard router provided by Backbone. The router is typically
# initialized by passing the function returned by **routes.coffee**.
Copy link
Contributor

@shvaikalesh shvaikalesh Nov 17, 2016

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure that we should remove .coffee here.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wrong search and replace, I'll revert.

@shvaikalesh
Copy link
Contributor

Also, we should remove all 'use strict' declarations, because es6 modules are always strict.

@@ -1,5 +1,7 @@
'use strict'

import mediator from '../mediator'
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No, the require was intended. There's a dependency cycle between utils and mediator.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'll double check but I'm pretty sure Rollup handle circular dependencies.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

oh, amazing then :-)!

@Florian-R
Copy link
Contributor Author

Also, we should remove all 'use strict' declarations, because es6 modules are always strict.

Make sense, done for the src directory for now.

@Florian-R
Copy link
Contributor Author

Added one commits for the test. I had to use a tmp dir to compile the coffee. See benbria/coffee-coverage/issues/82 for the rationale. Let me know if your good with this approach, and I'll tweak the code to avoid a double compilation.

grunt.registerTask 'test', 'mochaTest:native'
grunt.registerTask 'test:jquery', 'mochaTest:jquery'
grunt.registerTask 'test', ['clean', 'instrument', 'coffee:test', 'mochaTest:native']
grunt.registerTask 'test:jquery', ['clean', 'instrument', 'coffee:test', 'mochaTest:jquery']
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This part need some rework.

"plugins": [
"transform-es2015-modules-commonjs"
]
}
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Inlined this to avoid a .babelrc

'coffee-script/register'
'coffee-coverage/register-istanbul'
->
global._$coffeeIstanbul = {}
Copy link
Contributor Author

@Florian-R Florian-R Nov 23, 2016

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is ugly, but needed. istanbul add something like

if (typeof _$coffeeIstanbul === 'undefined') _$coffeeIstanbul = {};

in every modules. This breaks badly with babel-register which wrap the code in a function with a use strict pragma.

Edit: In all fairness, this comes indeed from coffee-coverage. I've proposed a fix here benbria/coffee-coverage#82 (comment)

"grunt-cli": "~0.1.13",
"grunt-coffeelint": "~0.0.15",
"grunt-contrib-clean": "1.0.0",
"grunt-contrib-coffee": "florian-r/grunt-contrib-coffee",
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is WIP pending a new release of grunt-contrib-coffee. The current version use an old version of coffee-script.

@Florian-R
Copy link
Contributor Author

Closing per #900

@Florian-R Florian-R closed this Sep 11, 2017
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Incompatibility upgrading to 1.2.0 from 1.1.1
4 participants