Skip to content

Commit f670cf3

Browse files
committed
feat(core): add support for netlify-cms extensions
Add `extensionsDir` option Convert import calls to require in webpack config Update test snapshots
1 parent 0e7d7bb commit f670cf3

File tree

6 files changed

+249
-108
lines changed

6 files changed

+249
-108
lines changed

Diff for: lib/entry.js

+13-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,17 @@
1-
import CMS from "netlify-cms";
2-
import CSS from "netlify-cms/dist/cms.css";
1+
/* global REQUIRE_EXTENSIONS */
2+
/* eslint-disable import/order */
3+
function requireAll(r) {
4+
r.keys().forEach(r);
5+
}
36

4-
export default {
7+
const CMS = require("netlify-cms");
8+
9+
if (REQUIRE_EXTENSIONS) {
10+
requireAll(require.context("extensions/", true, /\.js$/));
11+
}
12+
const CSS = require("netlify-cms/dist/cms.css");
13+
14+
module.exports = {
515
CMS,
616
CSS
717
};

Diff for: src/module.js

+12-3
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ const WEBPACK_NETLIFY_COMPILER_NAME = "netlify-cms";
2626
const DEFAULTS = {
2727
adminPath: "admin",
2828
adminTitle: "Content Manager",
29+
extensionsDir: "netlify-cms",
2930
cmsConfig: {
3031
media_folder: "static/uploads"
3132
}
@@ -48,12 +49,18 @@ export default function NetlifyCmsModule(moduleOptions) {
4849
);
4950
};
5051

51-
const getWebpackNetlifyConfig = function(builder, adminPath, adminTitle) {
52+
const getWebpackNetlifyConfig = function(
53+
builder,
54+
adminPath,
55+
adminTitle,
56+
extensionsDir
57+
) {
5258
return webpackNetlifyConfig.call(
5359
builder,
5460
WEBPACK_NETLIFY_COMPILER_NAME,
5561
adminPath,
56-
adminTitle
62+
adminTitle,
63+
extensionsDir
5764
);
5865
};
5966

@@ -78,6 +85,7 @@ export default function NetlifyCmsModule(moduleOptions) {
7885
const options = getOptions();
7986
const ADMIN_PATH = options.adminPath.replace(/\/?$/, "/");
8087
const ADMIN_TITLE = options.adminTitle;
88+
const EXTENSIONS_DIR = options.extensionsDir;
8189
const DIST_DIR = getDistDir(ADMIN_PATH);
8290

8391
// This will be called once when builder started
@@ -87,7 +95,8 @@ export default function NetlifyCmsModule(moduleOptions) {
8795
const webpackConfig = getWebpackNetlifyConfig(
8896
builder,
8997
ADMIN_PATH,
90-
ADMIN_TITLE
98+
ADMIN_TITLE,
99+
EXTENSIONS_DIR
91100
);
92101

93102
webpackConfig.plugins.push({

Diff for: src/webpack.config.js

+17-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import { resolve } from "path";
1+
import { existsSync } from "fs";
2+
import { join, resolve } from "path";
23

34
import { Utils } from "nuxt";
45
/* eslint-disable import/no-extraneous-dependencies */
@@ -7,7 +8,13 @@ import webpack from "webpack";
78
import HTMLPlugin from "html-webpack-plugin";
89
import ExtractTextPlugin from "extract-text-webpack-plugin";
910

10-
export default function webpackNetlifyCmsConfig(name, urlPath, pageTitle) {
11+
export default function webpackNetlifyCmsConfig(
12+
name,
13+
urlPath,
14+
pageTitle,
15+
extensionsDir
16+
) {
17+
const EXTENSIONS_DIR = join(this.options.srcDir, extensionsDir);
1118
const config = {
1219
name,
1320
entry: resolve(__dirname, "../lib/entry.js"),
@@ -30,13 +37,21 @@ export default function webpackNetlifyCmsConfig(name, urlPath, pageTitle) {
3037
}
3138
]
3239
},
40+
resolve: {
41+
alias: {
42+
extensions: EXTENSIONS_DIR
43+
}
44+
},
3345
plugins: [
3446
new HTMLPlugin({
3547
title: pageTitle,
3648
filename: "index.html",
3749
template: resolve(__dirname, "../lib/template", "index.html"),
3850
inject: true,
3951
chunksSortMode: "dependency"
52+
}),
53+
new webpack.DefinePlugin({
54+
REQUIRE_EXTENSIONS: existsSync(EXTENSIONS_DIR) ? true : false
4055
})
4156
]
4257
};

Diff for: test/__snapshots__/dev.test.js.snap

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ exports[`module dev mode admin 1`] = `
99
<title>Content Manager</title>
1010
</head>
1111
<body>
12-
<script type=\\"text/javascript\\" src=\\"/admin/bundle.b3269f80518b70bb145e.js\\"></script></body>
12+
<script type=\\"text/javascript\\" src=\\"/admin/bundle.a47fc32f4be2190c8f24.js\\"></script></body>
1313
</html>
1414
"
1515
`;

Diff for: test/__snapshots__/module.test.js.snap

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ exports[`module admin 1`] = `
99
<title>Content Manager</title>
1010
</head>
1111
<body>
12-
<script type=\\"text/javascript\\" src=\\"/admin/bundle.4853fc2928590d1bc9cb.js\\"></script></body>
12+
<script type=\\"text/javascript\\" src=\\"/admin/bundle.a408a93c790a7fcc10d1.js\\"></script></body>
1313
</html>
1414
"
1515
`;

0 commit comments

Comments
 (0)