Skip to content
This repository was archived by the owner on Feb 23, 2021. It is now read-only.

Commit b377cd4

Browse files
authored
Merge pull request #6 from tbrnslv/master
upgraded to webpack 4 & babel 7 rest of dependancies also updated to …
2 parents b83c62c + 52811dc commit b377cd4

File tree

2 files changed

+89
-77
lines changed

2 files changed

+89
-77
lines changed

package.json

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"main": "dist/index.js",
66
"scripts": {
77
"build": "babel ./src --out-dir ./dist",
8-
"test": "mocha test/index.js --compilers js:babel-register",
8+
"test": "mocha test/index.js --require @babel/register",
99
"postinstall": "npm run build",
1010
"prebuild": "rimraf dist",
1111
"test:watch": "npm t -- --watch"
@@ -32,30 +32,31 @@
3232
"react-dom": "^15.3.0 || ^16.0.0"
3333
},
3434
"dependencies": {
35-
"babel-register": "^6.26.0",
36-
"chai-spies": "^0.7.1",
37-
"chalk": "^1.1.3",
35+
"@babel/register": "^7.0.0",
36+
"chai-spies": "^1.0.0",
37+
"chalk": "^2.4.2",
3838
"fs-extra": "^2.0.0",
3939
"js-beautify": "^1.7.4",
40-
"react": "^16.0.0",
41-
"react-dom": "^16.0.0",
42-
"requirefresh": "^2.1.0",
43-
"webpack": "^1.14.0"
40+
"react": "^16.8.3",
41+
"react-dom": "^16.8.3",
42+
"requirefresh": "^2.2.0",
43+
"webpack": "^4.29.6"
4444
},
4545
"devDependencies": {
46-
"babel-cli": "^6.26.0",
47-
"babel-preset-es2015": "^6.22.0",
48-
"babel-preset-react": "^6.22.0",
49-
"babel-preset-stage-2": "^6.22.0",
50-
"chai": "^3.5.0",
51-
"mocha": "^3.5.3",
52-
"rimraf": "^2.6.2"
46+
"@babel/cli": "^7.2.3",
47+
"@babel/core": "^7.3.4",
48+
"@babel/preset-env": "^7.3.4",
49+
"@babel/plugin-transform-react-jsx": "7.3.0",
50+
"chai": "^4.2.0",
51+
"mocha": "^6.0.2",
52+
"rimraf": "^2.6.3"
5353
},
5454
"babel": {
5555
"presets": [
56-
"es2015",
57-
"stage-2",
58-
"react"
56+
"@babel/preset-env"
57+
],
58+
"plugins": [
59+
"@babel/plugin-transform-react-jsx"
5960
]
6061
}
6162
}

src/index.js

Lines changed: 70 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1,90 +1,101 @@
1-
import beautify from 'js-beautify';
2-
import { renderToStaticMarkup } from 'react-dom/server';
3-
import requirefresh from 'requirefresh';
4-
import prettyError from './utils/errors';
1+
import beautify from "js-beautify";
2+
import { renderToStaticMarkup } from "react-dom/server";
3+
import requirefresh from "requirefresh";
4+
import prettyError from "./utils/errors";
55

66
const beautifyHtml = beautify.html;
77

8-
require('babel-register')({
9-
extensions: ['.js', '.jsx'],
8+
require("@babel/register")({
9+
extensions: [".js", ".jsx"]
1010
});
1111

1212
class StaticRenderHtmlWebpackPlugin {
1313
constructor(options) {
14-
this.options = Object.assign({}, {
15-
entry: '',
16-
pretty: false,
17-
}, options);
14+
this.options = Object.assign(
15+
{},
16+
{
17+
entry: "",
18+
pretty: false
19+
},
20+
options
21+
);
1822
}
1923

2024
apply(compiler) {
2125
const entry = this.options.entry;
2226

23-
compiler.plugin('emit', (compilation, callback) => {
24-
let result = '';
27+
compiler.hooks.emit.tapAsync(
28+
{ name: "JSX to HTML Static Render" },
29+
(compilation, callback) => {
30+
let result = "";
2531

26-
if (!entry) {
27-
compilation.errors.push(prettyError.emptyEntry(compiler.context));
28-
return callback();
29-
}
30-
31-
let fileExtension = entry.split('.');
32-
fileExtension = `.${fileExtension[fileExtension.length - 1]}`;
33-
34-
const FILE_SUPPORT_REGEXP = /.(js|jsx)$/g;
35-
if (!FILE_SUPPORT_REGEXP.test(fileExtension)) {
36-
compilation.errors.push(prettyError.fileExtension(entry, compiler.context));
37-
return callback();
38-
}
39-
40-
try {
41-
result = requirefresh(entry);
42-
} catch (error) {
43-
compilation.errors.push(prettyError.errorWrapper(error));
44-
return callback();
45-
}
32+
if (!entry) {
33+
compilation.errors.push(prettyError.emptyEntry(compiler.context));
34+
return callback();
35+
}
4636

47-
compilation.fileDependencies.push(entry);
37+
let fileExtension = entry.split(".");
38+
fileExtension = `.${fileExtension[fileExtension.length - 1]}`;
4839

49-
if (result.default && typeof result.default === 'object') {
50-
result = result.default;
51-
}
40+
const FILE_SUPPORT_REGEXP = /.(js|jsx)$/g;
41+
if (!FILE_SUPPORT_REGEXP.test(fileExtension)) {
42+
compilation.errors.push(
43+
prettyError.fileExtension(entry, compiler.context)
44+
);
45+
return callback();
46+
}
5247

53-
Object.keys(result).map((key) => {
54-
let renderedStaticMarkup = '';
5548
try {
56-
renderedStaticMarkup = `<!DOCTYPE html>${renderToStaticMarkup(result[key])}`;
49+
result = requirefresh(entry);
5750
} catch (error) {
58-
renderedStaticMarkup = `Error: '${error}'\nFile: '${entry}'\nProperty: '${key}'`;
5951
compilation.errors.push(prettyError.errorWrapper(error));
52+
return callback();
6053
}
6154

62-
const file = {
63-
name: `${key}.html`,
64-
source: renderedStaticMarkup,
65-
size: renderedStaticMarkup.length,
66-
};
55+
compilation.fileDependencies.add(entry);
6756

68-
let html = file.source;
57+
if (result.default && typeof result.default === "object") {
58+
result = result.default;
59+
}
6960

70-
if (this.options.pretty) {
61+
Object.keys(result).map(key => {
62+
let renderedStaticMarkup = "";
7163
try {
72-
html = beautifyHtml(html, {
73-
indent_size: 2,
74-
});
64+
renderedStaticMarkup = `<!DOCTYPE html>${renderToStaticMarkup(
65+
result[key]
66+
)}`;
7567
} catch (error) {
76-
html = `Error: '${error}'\nFile: '${entry}'\nProperty: '${key}'`;
68+
renderedStaticMarkup = `Error: '${error}'\nFile: '${entry}'\nProperty: '${key}'`;
7769
compilation.errors.push(prettyError.errorWrapper(error));
7870
}
79-
}
8071

81-
compilation.assets[file.name] = {
82-
source: () => html,
83-
size: () => file.size,
84-
};
85-
});
86-
callback();
87-
});
72+
const file = {
73+
name: `${key}.html`,
74+
source: renderedStaticMarkup,
75+
size: renderedStaticMarkup.length
76+
};
77+
78+
let html = file.source;
79+
80+
if (this.options.pretty) {
81+
try {
82+
html = beautifyHtml(html, {
83+
indent_size: 2
84+
});
85+
} catch (error) {
86+
html = `Error: '${error}'\nFile: '${entry}'\nProperty: '${key}'`;
87+
compilation.errors.push(prettyError.errorWrapper(error));
88+
}
89+
}
90+
91+
compilation.assets[file.name] = {
92+
source: () => html,
93+
size: () => file.size
94+
};
95+
});
96+
callback();
97+
}
98+
);
8899
}
89100
}
90101

0 commit comments

Comments
 (0)