Skip to content

Commit f827ebc

Browse files
committed
feat: React support
Close #12
1 parent 1b92d9e commit f827ebc

File tree

5 files changed

+42
-14
lines changed

5 files changed

+42
-14
lines changed

docs/en/languages-and-frameworks.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,11 @@ declare module "*.vue" {
3434

3535
`yarn add vue electron-webpack-vue --dev`
3636

37-
Please note — [Chrome devtools extension for debugging Vue.js applications](https://github.com/vuejs/vue-devtools) is automatically installed in a dev mode.
37+
Please note — [Chrome devtools extension for debugging Vue.js applications](https://github.com/vuejs/vue-devtools) is automatically installed in a dev mode.
38+
39+
## React
40+
41+
`yarn add babel-preset-react --dev`
3842

3943
## iView
4044

packages/electron-webpack/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "electron-webpack",
3-
"version": "1.2.0",
3+
"version": "1.3.0",
44
"license": "MIT",
55
"author": "Vladimir Krivosheev <develar@gmail.com>",
66
"main": "out/main.js",

packages/electron-webpack/src/configurators/js.ts

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,23 @@ import { gte } from "semver"
22
import { WebpackConfigurator } from "../main"
33

44
export function createBabelLoader(configurator: WebpackConfigurator) {
5+
// better to use require instead of just preset sname to avoid babel resolving (in our test we set custom resolver - and only in case of explicit required it works)
6+
const presets = [
7+
[
8+
require("babel-preset-env"), {
9+
modules: false,
10+
targets: computeBabelEnvTarget(configurator.isRenderer, configurator.electronVersion),
11+
}],
12+
]
13+
14+
if (configurator.hasDevDependency("babel-preset-react")) {
15+
presets.push([require("babel-preset-react")])
16+
}
17+
518
return {
619
loader: "babel-loader",
720
options: {
8-
presets: [
9-
[require("babel-preset-env"), {
10-
modules: false,
11-
targets: computeBabelEnvTarget(configurator.isRenderer, configurator.electronVersion),
12-
}],
13-
],
21+
presets,
1422
plugins: [
1523
require("babel-plugin-syntax-dynamic-import"),
1624
]

test/out/__snapshots__/loaderDetectionTest.js.snap

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ resolve 'nunjucks-loader' in '<project-dir>'
4444
@ multi <project-dir>/src/main/index.js"
4545
`;
4646
47+
exports[`react 1`] = `"Cannot find module 'babel-preset-react' from 'js.js'"`;
48+
4749
exports[`sass 1`] = `
4850
"<project-dir>/src/renderer/index.js
4951
Module not found: Error: Can't resolve 'sass-loader' in '<project-dir>'

test/src/loaderDetectionTest.ts

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,6 @@ test("nunjucks", async () => {
2121

2222
test("sass", async () => {
2323
const projectDir = await getMutableProjectDir()
24-
await writeJson(path.join(projectDir, "package.json"), {
25-
name: "Test",
26-
devDependencies: {
27-
"nunjucks-loader": "*"
28-
}
29-
})
3024
await writeFile(path.join(projectDir, "src/renderer/file.scss"), `
3125
$font-stack: Helvetica, sans-serif;
3226
$primary-color: #333;
@@ -41,4 +35,24 @@ test("sass", async () => {
4135
}})
4236

4337
return await assertThat(testWebpack(configuration, projectDir)).throws(projectDir)
38+
})
39+
40+
test("react", async () => {
41+
const projectDir = await getMutableProjectDir()
42+
await writeJson(path.join(projectDir, "package.json"), {
43+
name: "Test",
44+
devDependencies: {
45+
"babel-preset-react": "*"
46+
}
47+
})
48+
await writeFile(path.join(projectDir, "src/renderer/file.jsx"), `
49+
<MyButton color="blue" shadowSize={2}>
50+
Click Me
51+
</MyButton>
52+
`)
53+
await writeFile(path.join(projectDir, "src/renderer/index.js"), 'import "./file.jsx"')
54+
const configuration = require("electron-webpack/webpack.renderer.config.js")({production: true, configuration: {
55+
projectDir,
56+
}})
57+
await assertThat(configuration).throws(projectDir)
4458
})

0 commit comments

Comments
 (0)