Skip to content

Commit 337fcbd

Browse files
committed
PROOF-OF-CONCEPT: Externalized React, React-DOM to support React Addons
1 parent 7f0f3ae commit 337fcbd

File tree

4 files changed

+37
-4
lines changed

4 files changed

+37
-4
lines changed

gulpfile.js

+8
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,10 @@ gulp.task('build-dev-client', ['compile-lib', 'compile-client'], () => {
101101
.pipe(webpack({
102102
quiet: true,
103103
output: { filename: 'next-dev.bundle.js' },
104+
externals: [{
105+
'react': 'var React',
106+
'react-dom': 'var ReactDOM'
107+
}],
104108
module: {
105109
loaders: [
106110
{
@@ -134,6 +138,10 @@ gulp.task('build-client', ['compile-lib', 'compile-client'], () => {
134138
}),
135139
new webpack.webpack.optimize.UglifyJsPlugin()
136140
],
141+
externals: {
142+
'react': 'var React',
143+
'react-dom': 'var ReactDOM'
144+
},
137145
module: {
138146
loaders: [
139147
{

lib/document.js

+6
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,12 @@ export default ({ head, css, html, data, dev, staticMarkup, cdn }) => {
1010
</head>
1111
<body>
1212
<div id='__next' dangerouslySetInnerHTML={{ __html: html }} />
13+
14+
{/* XXX: This has to be configured somehow! */}
15+
<script src='https://unpkg.com/react@15/dist/react-with-addons.js' />
16+
<script src='https://unpkg.com/react-dom@15/dist/react-dom.js' />
17+
<script src='https://unpkg.com/react-md@0.3.7/dist/react-md.js' />
18+
1319
{staticMarkup ? null : <script dangerouslySetInnerHTML={{ __html: '__NEXT_DATA__ = ' + htmlescape(data) }} />}
1420
{staticMarkup ? null : createClientScript({ dev, cdn })}
1521
</body>

package.json

+4
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,10 @@
6464
"path-match": "1.2.4",
6565
"react": "15.3.2",
6666
"react-dom": "15.3.2",
67+
"react-addons-css-transition-group": "^15.3.2",
68+
"react-addons-pure-render-mixin": "^15.3.2",
69+
"react-addons-transition-group": "^15.3.2",
70+
"react-md": "0.3.7",
6771
"react-hot-loader": "3.0.0-beta.6",
6872
"send": "0.14.1",
6973
"strip-ansi": "3.0.1",

server/build/webpack.js

+19-4
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,14 @@ export default async function createCompiler (dir, { hotReload = false } = {}) {
113113
{
114114
alias: {
115115
'babel-runtime': babelRuntimePath,
116-
react: require.resolve('react'),
116+
'react': require.resolve('react'),
117+
118+
// XXX: This shouldn't here, but since external Babel config support is missing,
119+
// there is no other way to achieve this. (Even though, `.babelrc` and
120+
// `package.json/babel` sections are merged, I couldn't make them work correctly.)
121+
'react-md': require.resolve('react-md'),
122+
'react-md/lib/Buttons': require.resolve('react-md'),
123+
117124
'next/link': require.resolve('../../lib/link'),
118125
'next/css': require.resolve('../../lib/css'),
119126
'next/head': require.resolve('../../lib/head')
@@ -139,13 +146,21 @@ export default async function createCompiler (dir, { hotReload = false } = {}) {
139146
publicPath: hotReload ? 'http://localhost:3030/' : null
140147
},
141148
externals: [
142-
'react',
143-
'react-dom',
144149
{
145-
[require.resolve('react')]: 'react',
150+
[require.resolve('react')]: { commonjs: 'react', commonjs2: 'react', amd: 'react', root: 'React' },
151+
[require.resolve('react-dom')]: { commonjs: 'react-dom', commonjs2: 'react-dom', amd: 'react-dom', root: 'ReactDOM' },
152+
[require.resolve('react-addons-css-transition-group')]: 'var React.addons.CSSTransitionGroup',
153+
[require.resolve('react-addons-transition-group')]: 'var React.addons.TransitionGroup',
154+
[require.resolve('react-addons-pure-render-mixin')]: 'var React.addons.PureRenderMixin',
146155
[require.resolve('../../lib/link')]: 'next/link',
147156
[require.resolve('../../lib/css')]: 'next/css',
148157
[require.resolve('../../lib/head')]: 'next/head'
158+
},
159+
160+
// XXX: This also shouldn't be here, but missing external Webpack config support forces me
161+
// to patch it here.
162+
{
163+
[require.resolve('react-md')]: 'var ReactMD'
149164
}
150165
],
151166
resolve: {

0 commit comments

Comments
 (0)