UNPKG

3.31 kBJavaScriptView Raw
1const { isAngular } = require("./projectHelpers");
2
3const NEW_DEPS_MESSAGE = `\
4A few new dependencies were added. \
5Run "npm install" before building your project.
6`;
7
8const ALREADY_ADDED_MESSAGE = `\
9Some dependencies have already been added. \
10If you want to force update them, please run "node_modules/.bin/update-ns-webpack".
11`;
12
13const USAGE_MESSAGE = `
14NativeScript Webpack plugin was successfully added.
15You can now bundle your project by passing --bundle flag to NativeScript CLI commands:
16 - tns build android --bundle
17 - tns build ios --bundle
18 - tns run android --bundle
19 - tns run ios --bundle
20You can also pass the "--env.uglify" flag to use UglifyJS for minification.
21For more information check out https://docs.nativescript.org/tooling/bundling-with-webpack#bundling.
22`;
23
24function addProjectDeps(packageJson, force = false) {
25 packageJson.devDependencies = packageJson.devDependencies || {};
26 const postinstallOptions = {
27 deps: Object.assign({}, packageJson.devDependencies),
28 };
29
30 const depsToAdd = getRequiredDeps(packageJson);
31 Object.keys(depsToAdd).forEach(function(name) {
32 const version = depsToAdd[name];
33 Object.assign(postinstallOptions,
34 addDependency(postinstallOptions.deps, name, version, force));
35 });
36
37 return postinstallOptions;
38}
39
40function forceUpdateProjectDeps(packageJson) {
41 removeObsoleteDeps(packageJson);
42
43 return addProjectDeps(packageJson, true);
44}
45
46function removeObsoleteDeps(packageJson) {
47 const depsToRemove = [
48 "webpack",
49 "webpack-cli",
50 "webpack-bundle-analyzer",
51 "webpack-sources",
52 "clean-webpack-plugin",
53 "copy-webpack-plugin",
54 "raw-loader",
55 "css-loader",
56 "nativescript-worker-loader",
57 "uglifyjs-webpack-plugin",
58 "@angular-devkit/core",
59 "resolve-url-loader",
60 "sass-loader",
61 ];
62
63 depsToRemove.forEach(dep => delete packageJson.devDependencies[dep]);
64}
65
66function addDependency(deps, name, version, force) {
67 const options = { deps };
68
69 if (!deps[name] || force) {
70 deps[name] = version;
71 options.newDepsAdded = true;
72 console.info(`Adding dev dependency: ${name}@${version}`);
73 } else if (deps[name] !== version) {
74 options.hasOldDeps = true;
75 console.info(`Dev dependency: ${name} already added. Leaving version: ${deps[name]}`);
76 }
77
78 return options;
79}
80
81function getRequiredDeps(packageJson) {
82 if (!isAngular({packageJson})) {
83 return false;
84 }
85
86 const deps = {
87 "@angular/compiler-cli": "~7.1.0",
88 };
89
90 if (!dependsOn(packageJson, "@angular-devkit/build-angular")) {
91 deps["@ngtools/webpack"] = "~7.1.0";
92 }
93
94 return deps;
95}
96
97
98function dependsOn(packageJson, package) {
99 if (!packageJson) {
100 return false;
101 }
102
103 return packageJson.dependencies.hasOwnProperty(package) ||
104 packageJson.devDependencies.hasOwnProperty(package);
105}
106
107function showHelperMessages({ newDepsAdded, hasOldDeps }) {
108 console.info(USAGE_MESSAGE);
109
110 if (hasOldDeps) {
111 console.info(ALREADY_ADDED_MESSAGE);
112 }
113
114 if (newDepsAdded) {
115 console.info(NEW_DEPS_MESSAGE);
116 }
117}
118
119module.exports = {
120 addProjectDeps,
121 forceUpdateProjectDeps,
122 showHelperMessages,
123};