forked from mendixlabs/calendar
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Gruntfile.js
122 lines (110 loc) · 4 KB
/
Gruntfile.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
"use strict";
const webpack = require("webpack");
const webpackConfig = require("./webpack.config");
const merge = require("webpack-merge");
const packageJson = require("./package.json");
const ExtractTextPlugin = require("extract-text-webpack-plugin");
const widgetName = packageJson.widgetName;
const name = packageJson.widgetName.toLowerCase();
const webpackConfigRelease = webpackConfig.map(config => merge(config, {
devtool: false,
mode: "production",
optimization: { minimize: true }
}));
webpackConfigRelease[0].plugins.push(new ExtractTextPlugin({
filename: `./widgets/com/mendix/widget/custom/${name}/ui/${widgetName}.css`
}));
webpackConfigRelease[0].module.rules[2] = { test: /\.s?css$/, loader: ExtractTextPlugin.extract({
fallback: "style-loader",
use: [ "css-loader", "sass-loader" ]
})
};
module.exports = function(grunt) {
const pkg = grunt.file.readJSON("package.json");
grunt.initConfig({
watch: {
updateWidgetFiles: {
files: [ "./src/**/*" ],
tasks: [ "webpack:develop", "file_append", "compress", "copy" ],
options: {
debounceDelay: 250
}
}
},
compress: {
dist: {
options: {
archive: "./dist/" + pkg.version + "/" + pkg.widgetName + ".mpk",
mode: "zip"
},
files: [ {
expand: true,
date: new Date(),
store: false,
cwd: "./dist/tmp/widgets",
src: [ "**/*" ]
} ]
}
},
copy: {
distDeployment: {
files: [ {
dest: "./dist/MxTestProject/deployment/web/widgets",
cwd: "./dist/tmp/widgets/",
src: [ "**/*" ],
expand: true
} ]
},
mpk: {
files: [ {
dest: "./dist/MxTestProject/widgets",
cwd: "./dist/" + pkg.version + "/",
src: [ pkg.widgetName + ".mpk" ],
expand: true
} ]
}
},
file_append: {
addSourceURL: {
files: [ {
append: `\n\n//# sourceURL=${pkg.widgetName}.webmodeler.js\n`,
input: `dist/tmp/widgets/${pkg.widgetName}.webmodeler.js`
} ]
}
},
webpack: {
develop: webpackConfig,
release: webpackConfigRelease
},
clean: {
build: [
"./dist/" + pkg.version + "/" + pkg.widgetName + "/*",
"./dist/tmp/**/*",
"./dist/tsc/**/*",
"./dist/testresults/**/*",
"./dist/MxTestProject/deployment/web/widgets/" + pkg.widgetName + "/*",
"./dist/MxTestProject/widgets/" + pkg.widgetName + ".mpk"
]
},
checkDependencies: { this: {} }
});
grunt.loadNpmTasks("grunt-check-dependencies");
grunt.loadNpmTasks("grunt-contrib-clean");
grunt.loadNpmTasks("grunt-contrib-compress");
grunt.loadNpmTasks("grunt-contrib-copy");
grunt.loadNpmTasks("grunt-contrib-watch");
grunt.loadNpmTasks("grunt-file-append");
grunt.loadNpmTasks("grunt-webpack");
grunt.registerTask("default", [ "clean build", "watch" ]);
grunt.registerTask(
"clean build",
"Compiles all the assets and copies the files to the dist directory.",
[ "checkDependencies", "clean:build", "webpack:develop", "file_append", "compress:dist", "copy" ]
);
grunt.registerTask(
"release",
"Compiles all the assets and copies the files to the dist directory. Minified without source mapping",
[ "checkDependencies", "clean:build", "webpack:release", "file_append", "compress:dist", "copy" ]
);
grunt.registerTask("build", [ "clean build" ]);
};