* Use babel-loader 7 beta.
This will get rid of the DeprecationWarning printed while
starting next.
Also this is the version recommened to use with Webpack 2.
* Update to the babel-loader-7
Here we don't use the full capabilities of babel-preset-env.
But it's recommended to use it without browser configs as
a substitute for babel-preset-latest.
That's why we did this.
* Introduce script tag based page loading system.
* Call ensurePage only in the dev mode.
* Implement router using the page-loader.
* Fix a typo and remove unwanted code.
* Fix some issues related to rendering.
* Fix production tests.
* Fix ondemand test cases.
* Fix unit tests.
* Get rid of eval completely.
* Remove all the inline code.
* Remove the json-pages plugin.
* Rename NEXT_PAGE_LOADER into __NEXT_PAGE_LOADER__
* Rename NEXT_LOADED_PAGES into __NEXT_LOADED_PAGES__
* Remove some unwanted code.
* Load everything async.
* Remove lib/eval-script.js
We no longer need it.
* Move webpack idle wait code to the page-loader.
Because that's the place to do it.
* Remove pageNotFound key from the error.
* Remove unused error field 'buildError'
* Add much better logic to normalize routes.
* Get rid of mitt.
* Introduce a better way to register pages.
* Came back to the mitt() based page-loader.
* Add link rel=preload support.
* Add assetPrefix support to add support for CDNs.
* Add assetPrefix support for preload links.
* Update readme.md
* Update references to `.next`
* Remove console logs and extraneous semi colons
* Remove lint errors
* Update references to .next and update docs
* Update options from nested to flat with `distDir`
* Add integration tests, and update `.gitignore`
* Rename integration folder to dist-dir to match standards
* Introduce better debug error handling
With this we are rendering runtime and debug errors inside
a it's own error root.
That gives us better error handling and control.
Also, now we are patching React core to capture runtime errors.
* Render the initial error on the server.
With this we are rendering runtime and debug errors inside
a it's own error root.
That gives us better error handling and control.
Also, now we are patching React core to capture runtime errors.
This will isolate all the NPM modules into a single chunk.
That chunk won't touch by webpack unless, there's a new NPM module.
That gives us much better re-build performance.
This will isolate all the NPM modules into a single chunk.
That chunk won't touch by webpack unless, there's a new NPM module.
That gives us much better re-build performance.
* Fix HMR not working issue.
Our hot-reload code on the server has custom webpack error dectection logic.
Is supports only multi-modules entries.
So, we need to all entries as multi-module entries
even if there's just a single entry.
* Add a test case for showing errors over HMR.
* Use file hashes instead of BUILD_ID.
Now JSON pages also not prefixed with a hash and
doesn't support immutable caching.
Instead it supports Etag bases caching.
* Remove appUpdated Router Events hook.
Becuase now we don't need it because there's no buildId validation.
* Remove buildId generation.
* Turn off hash checks in the dev mode.
* Update tests.
* Revert "Remove buildId generation."
This reverts commit fdd36a5a0a307becdbd1d85ae3881b3a15b03d26.
* Bring back the buildId validation.
* Handle buildId validation only in production.
* Add BUILD_ID to path again.
* Remove duplicate immutable header.
* Fix tests.
* Throw Error when url.parse without true is parsed
This is a bit more descriptive when this mistake is made by the user.
* Parse when needed
* Parse querystring if it is not provided
* Add a plan for dynamic entry middleware.
* Use dynamic pages middleware to load pages in dev.
* Add the first version of middleware but not tested.
* Integrated.
* Disable prefetching in development.
Otherwise it'll discard the use of dynamic-entries.
* Build custom document and error always.
* Refactor code base.
* Change branding as on-demand entries.
* Fix tests.
* Add a client side pinger for on-demand-entries.
* Dispose inactive entries.
* Add proper logs.
* Update grammer changes.
* Add integration tests for ondemand entries.
* Improve ondemand entry disposing logic.
* Try to improve testing.
* Make sure entries are not getting disposed in basic integration tests.
* Resolve conflicts.
* Fix tests.
* Fix issue when running Router.onRouteChangeComplete
* Simplify state management.
* Make sure we don't dispose the last active page.
* Reload invalid pages detected with the client side ping.
* Improve the pinger code.
* Touch the first page to speed up the future rebuild times.
* Add Websockets based pinger.
* Revert "Add Websockets based pinger."
This reverts commit f706a49a3d886d0231259b7a1fded750ced2e48f.
* Do not send requests per every route change.
* Make sure we are completing the middleware request always.
* Make sure test pages are prebuilt.
* Remove traces of glamor
As talked about with @rauchg. Glamor takes up around 60KB of the bundle (pre-gzip). Since styled-jsx is the way to go now and we support adding glamor by the user we should remove it as dependency cause it is bundled even when not used.
Added rehydration to the example, since we did that in our code.
There is only one thing I'm not sure about and want to discuss:
what should we do with next/css. Right now I added a throw for when it is imported. I'm not sure if we should do that / some other way to notify the user it has been removed. The reasoning behind the throw is that when we would do a console.warn the user would see 'css.default.<X>' not found because we don't have the glamor dependency anymore.
* Update yarn.lock
* Remove test for styles
* Reload the page if the buildIds are mismatch.
* Reload the browser with main.js and commons.js buildId mismatch.
* Implement proper reloading with an API to persist the state.
* Add some tests for force reload.
* Change _reload to _forceReload.
* Add a section about reload hooks to the README.
* Allow to add a hook to handle BUILD_ID mismatch.
* Remove readme docs.
* Do not show a custom error to the user.
* Cancel the routing when there's a BUILD_ID mismatch.
* Fix a typo.
* Passing route to SingletonRouter.onBuildIdMismatch
* Handle buildId mismatch automatically.
* Fix "EXDEV: cross-device link not permitted" error
* Fix lint errors
Not sure why standard passes in my dev environment, but hopefully this fixes the CI errors.
* Fix logic mistake
Wow, my bad :/
The change in #1155 to remove server-side gzipping changed static
rendering to no longer return a promise, which broke the Hapi example
that was waiting for a resolved promise before closing the request.
This PR fixes up all render or serve methods of server.js to
consistently either await and/or return. Additionally, it collapses
serveStatic and _serveStatic, as _serveStatic no longer needs to be
factored out.
Without this, modules built with Babel or Webpack would have hard-coded absolute paths
all the way back to the root of the filesystem. This prevented compilation and running
on different machines or even from different directories on the same machine.
With this change, paths are hard-coded to the top-most node_madules directory found,
which should make them portable relative to the app.
Fixes#1160
* Remove babell-plugin-transform-react-constant-elements.
With this, our shared-modules example's counter won't work in
production mode. (as this plugin enabled)
So, we could see more issues like this.
That's why we don't need this at this time.
* Update package.json.
* adding hostname argument to CLI
* using -H instead of -hn
* removing hostname default
* checking that hostname has a truthy value that's not a boolean
* making the log message match the hostname
* oops
* Add babel-preset-2016 support.
This adds the support for Exponentiation operator (**)
* Use babel-preset-latest.
* Remove babel-plugin-transform-async-to-generator in favor of babel-plugin-latest
It has es2017 preset and it comes with the above plugin.
* Find custom babel config location properly.
Earlier we simply check for the .bablerc file in the dir.
But the actual logic is much complex.
Now we are using the babel's actual logic to find the
custom config location.
* Fix failing tests.
* Let webpack2 to handle ES2015 module system
Since Node.js can't do that, we need to transpile
ES2015 module system in the emit-file-loader.
* Use sourceMaps only in dev.
* Introduce a transform option to emit-file-loader
So, we can move our ES2015 transpile code with that option.
* Remove unwanted argument options.
* Update comments.
* Use dev flag instead of NODE_ENV
* Make sure lastAppProps always have some value.
* Revert "Make sure lastAppProps always have some value."
This reverts commit b4ae722d9c1a4460e17dbdc041b111cbd492b2aa.
* Throw an error, if we found an empty object from getInitialProps.
* Add proper tests for getInitialProps empty check.
* Use jest-cli instead of gulp plugin.
* Use jest-cli instead of gulp plugin.
* Move fixtures into the examples dir.
* Move test code of example app to the basic example.
* Add isolated tests for server/resolve
* Allow tests to use cheerio.
* Use portfinder to get a unique port.
* Move back integration tests into the example dir.
* Introduce next-test-utils.
* Remove gulp-jest
* Add coveralls support.
* Use transpiled version of code in dist.
This is to make sure same file gets covered
by both unit/isolated tests and integration tests.
* Add support for source maps.
* Use code from dist always.
* Use nyc to stop instrument.
* Add integration test suite for production usage.
* Use jest-cli.
* Add support for running e2e tests.
* Check gzipPath with fs.stat before serving
Otherwise, serve package might throw issues other than ENOENT
* Install chromedriver with npm install.
* Install chrome on travis-ci.
* Add --forceExit to Jest.
* Run tests only on Node v6.
That's because selenium-webdriver only supports
Node 6 LTS.
* Use chromedriver NPM module to install chromedriver.
* Use wd as the webdriver client.
* Run chromedriver before tests.
* Run travis for both node 4 and 6
* Remove unwanted npm install script.
* Move some common text utilities to next-test-utils
* Add lint checks and testing in npm prepublish hook.
* Use npm on travis-ci.
We are having some caching issues with yarn and chromedriver.
* Make tests work on windows.\n But chromedriver doesn't work.
* Clean up dependencies.
* Run chromedriver in background without any tools.
* Fix a typo in the code.
* Use ES6 features used in node4 inside the gulpfile.
* Add some comments.
* Add support for running in windows.
* Stop chromedriver properly on windows.
* Fix typos.
* Remove default next pages compilation from the main babel-loader.
This will fix the issue when the user ignore node_modules
via our .babelrc option.
* Change babel-loaders 'query' to 'options'.
That's what's supported/recommended in webpack 2
* Write BUILD_ID when building.
It's a random id (uuid.v4())
* Add buildId to the core JS files.
* Add immutable cache-control header.
Only if the buildId is matched.
* Set '-' as the dev buildId always.
* Add buildId handling for JSON pages.
* Check for .json file extension before JSON parse. Was throwing when reading js files.
* Fix cross platform regex
* Revert back to the original content in read-page.js
Otherwise, webpack will throw an error saying
it couldn't find entries.
That's because it couldn't find babel-loader and
other loaders installed into app's node_modules dir.
* Server JSON pages directly from the filesystem.
* Make Json pages even if there's an error.
* Implement much better page serving.
* Use JsonPagesPlugin in the production mode as well.
* Add gzip support for JSON pages.
* Use glob-promise instead of recursive-readdir
* Handle renderStatic 404 properly.
* Simply the gzip code.
* Cache already read JSON pages.
* Change JSON pages extension to .json.
* Fix HMR related issue.
* Fix hot-reload for .json solely on server.
* Properly clear cache on hot-reloader.
* Convert .js pages into .json page right inside the plugin.
* Fix gzipping .json pages.
* Remove unwanted json pages cleanup.
* Get rid of deprecated fs.exists for fs.access
* Add AOT gzip content-encoding support.
Currently we only do this for
main.js and commons.js only.
* Remove unwanted await.
* Use Promise.all to gzip assets in parallel.
* upgrade webpack
* fix WatchRemoveEventPlugin for webpack2
* use webpack2 for building for files
* bump webpack
* bump webpack
* monkeypatch watchpack
* compile _document using webpack
* don't emit the bundle file of _document.js
* exclude _document.js from minChunks of CommonsChunkPlugin
* handle creation/removal of pages/_document.js
* improve path handlings
* Create a babel-preset for plugins and presets we use.
Anyone could get it via 'next/babel'
* Remove 'use strict' from the source.
* Add next/router to alias resolver in our babel preset.