From b19d1b283395aa2d97be669fb9372fab2a1ab9e4 Mon Sep 17 00:00:00 2001 From: soarer100 Date: Thu, 11 Apr 2019 08:57:24 -0600 Subject: [PATCH 1/8] Implement pass webpack config path with nsconfig --- lib/compiler.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/compiler.js b/lib/compiler.js index 588edc5d..15ec2fa9 100644 --- a/lib/compiler.js +++ b/lib/compiler.js @@ -51,10 +51,12 @@ exports.runWebpackCompiler = function runWebpackCompiler(config, $projectData, $ const envData = buildEnvData($projectData, platform, env); const envParams = buildEnvCommandLineParams(config, envData, $logger); + const webpackConfigPath = $projectData.nsConfig.webpackConfig ? $projectData.nsConfig.webpackConfig : "webpack.config.js"; + const args = [ "--preserve-symlinks", pathResolve(projectDir, "node_modules", "webpack", "bin", "webpack.js"), - `--config=${pathResolve(projectDir, "webpack.config.js")}`, + `--config=${pathResolve(projectDir, webpackConfigPath)}`, ...(config.watch ? ["--watch"] : []), ...envParams, ].filter(a => !!a); From ecce45a7446b76c26e4007f835df2a544d9cc2c9 Mon Sep 17 00:00:00 2001 From: soarer100 Date: Thu, 11 Apr 2019 12:34:39 -0600 Subject: [PATCH 2/8] Small fix --- lib/compiler.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/compiler.js b/lib/compiler.js index 15ec2fa9..6712b187 100644 --- a/lib/compiler.js +++ b/lib/compiler.js @@ -51,7 +51,10 @@ exports.runWebpackCompiler = function runWebpackCompiler(config, $projectData, $ const envData = buildEnvData($projectData, platform, env); const envParams = buildEnvCommandLineParams(config, envData, $logger); - const webpackConfigPath = $projectData.nsConfig.webpackConfig ? $projectData.nsConfig.webpackConfig : "webpack.config.js"; + let webpackConfigPath = "webpack.config.js"; + if ($projectData.nsConfig && $projectData.nsConfig.webpackConfig) { + webpackConfigPath = $projectData.nsConfig.webpackConfig; + } const args = [ "--preserve-symlinks", From 11c81abc5bc92dd81a7d32b15bf633e77b8ccd2f Mon Sep 17 00:00:00 2001 From: soarer100 Date: Thu, 16 May 2019 05:10:45 -0600 Subject: [PATCH 3/8] Fix pass webpack config path --- lib/compiler.js | 6 +++--- projectFilesManager.js | 12 ++++++++++-- projectHelpers.js | 19 +++++++++++++++++++ templates/webpack.angular.js | 5 +++-- templates/webpack.config.spec.ts | 1 + 5 files changed, 36 insertions(+), 7 deletions(-) diff --git a/lib/compiler.js b/lib/compiler.js index 6712b187..daa3274c 100644 --- a/lib/compiler.js +++ b/lib/compiler.js @@ -6,6 +6,7 @@ const readline = require("readline"); const { messages } = require("../plugins/WatchStateLoggerPlugin"); const { buildEnvData, debuggingEnabled, getUpdatedEmittedFiles } = require("./utils"); +const { getWebpackConfigPath, setWebpackConfigPath } = require("../projectHelpers"); let hasBeenInvoked = false; @@ -51,15 +52,14 @@ exports.runWebpackCompiler = function runWebpackCompiler(config, $projectData, $ const envData = buildEnvData($projectData, platform, env); const envParams = buildEnvCommandLineParams(config, envData, $logger); - let webpackConfigPath = "webpack.config.js"; if ($projectData.nsConfig && $projectData.nsConfig.webpackConfig) { - webpackConfigPath = $projectData.nsConfig.webpackConfig; + setWebpackConfigPath($projectData.nsConfig.webpackConfig); } const args = [ "--preserve-symlinks", pathResolve(projectDir, "node_modules", "webpack", "bin", "webpack.js"), - `--config=${pathResolve(projectDir, webpackConfigPath)}`, + `--config=${pathResolve(projectDir, getWebpackConfigPath())}`, ...(config.watch ? ["--watch"] : []), ...envParams, ].filter(a => !!a); diff --git a/projectFilesManager.js b/projectFilesManager.js index 1a3855d4..67da224a 100644 --- a/projectFilesManager.js +++ b/projectFilesManager.js @@ -1,9 +1,12 @@ const path = require("path"); const fs = require("fs"); -const { isTypeScript, isAngular, isVue } = require("./projectHelpers"); +const { getNsConfig, getWebpackConfigPath, isTypeScript, isAngular, isVue, setWebpackConfigPath } = require("./projectHelpers"); + function addProjectFiles(projectDir) { + const nsConfig = JSON.parse(fs.readFileSync(getNsConfig())); + setWebpackConfigPath(nsConfig && nsConfig.webpackConfig ? nsConfig.webpackConfig : undefined); const projectTemplates = getProjectTemplates(projectDir); Object.keys(projectTemplates).forEach(function(templateName) { const templateDestination = projectTemplates[templateName]; @@ -52,12 +55,17 @@ function copyTemplate(templateName, destinationPath) { if (!fs.existsSync(destinationPath)) { console.info(`Creating file: ${destinationPath}`); const content = fs.readFileSync(templateName, "utf8"); + const destinationDir = path.dirname(destinationPath); + if (!fs.existsSync(destinationDir)) { + fs.mkdirSync(destinationDir, { recursive: true }) + } + fs.writeFileSync(destinationPath, content); } } function getProjectTemplates(projectDir) { - const WEBPACK_CONFIG_NAME = "webpack.config.js"; + const WEBPACK_CONFIG_NAME = getWebpackConfigPath(); const TSCONFIG_TNS_NAME = "tsconfig.tns.json"; let templates; diff --git a/projectHelpers.js b/projectHelpers.js index ed1ffbf4..98d4aabd 100644 --- a/projectHelpers.js +++ b/projectHelpers.js @@ -8,6 +8,8 @@ const PROJECT_DATA_GETTERS = { appResourcesPath: "getAppResourcesRelativeDirectoryPath", }; +let webpackConfigPath = 'webpack.config.js'; + const isTypeScript = ({ projectDir, packageJson } = {}) => { packageJson = packageJson || getPackageJson(projectDir); @@ -96,13 +98,29 @@ function convertSlashesInPath(modulePath) { return modulePath; } +function setWebpackConfigPath(path) { + if (path) { + webpackConfigPath = path; + } +} + +function getNsConfig() { + return resolve(getProjectDir(), "nsconfig.json") +} + +function getWebpackConfigPath() { + return webpackConfigPath; +} + const isWindows = process.platform.startsWith("win32"); module.exports = { getAppPathFromProjectData, getAppResourcesPathFromProjectData, + getNsConfig, getPackageJson, getProjectDir, + getWebpackConfigPath, isAndroid, isIos, isAngular, @@ -112,4 +130,5 @@ module.exports = { convertSlashesInPath, getIndentationCharacter, safeGet, + setWebpackConfigPath, }; \ No newline at end of file diff --git a/templates/webpack.angular.js b/templates/webpack.angular.js index a18491d8..b77d59ab 100644 --- a/templates/webpack.angular.js +++ b/templates/webpack.angular.js @@ -7,6 +7,7 @@ const { nsReplaceBootstrap } = require("nativescript-dev-webpack/transformers/ns const { nsReplaceLazyLoader } = require("nativescript-dev-webpack/transformers/ns-replace-lazy-loader"); const { nsSupportHmrNg } = require("nativescript-dev-webpack/transformers/ns-support-hmr-ng"); const { getMainModulePath } = require("nativescript-dev-webpack/utils/ast-utils"); +const hook = require("nativescript-hook")(__dirname); const CleanWebpackPlugin = require("clean-webpack-plugin"); const CopyWebpackPlugin = require("copy-webpack-plugin"); const { BundleAnalyzerPlugin } = require("webpack-bundle-analyzer"); @@ -28,7 +29,7 @@ module.exports = env => { } const AngularCompilerPlugin = getAngularCompilerPlugin(platform); - const projectRoot = __dirname; + const projectRoot = hook.findProjectDir(__dirname) || __dirname; // Default destination inside platforms//... const dist = resolve(projectRoot, nsWebpack.getAppPath(platform, projectRoot)); @@ -55,7 +56,7 @@ module.exports = env => { const externals = nsWebpack.getConvertedExternals(env.externals); const appFullPath = resolve(projectRoot, appPath); const appResourcesFullPath = resolve(projectRoot, appResourcesPath); - const tsConfigName = "tsconfig.tns.json"; + const tsConfigName = relative(__dirname, join(projectRoot, 'tsconfig.tns.json')); const entryModule = `${nsWebpack.getEntryModule(appFullPath, platform)}.ts`; const entryPath = `.${sep}${entryModule}`; const entries = { bundle: entryPath }; diff --git a/templates/webpack.config.spec.ts b/templates/webpack.config.spec.ts index da7c246c..9a4e1921 100644 --- a/templates/webpack.config.spec.ts +++ b/templates/webpack.config.spec.ts @@ -47,6 +47,7 @@ const webpackConfigAngular = proxyquire('./webpack.angular', { 'nativescript-dev-webpack/transformers/ns-support-hmr-ng': { nsSupportHmrNg: () => { return FakeHmrTransformerFlag } }, 'nativescript-dev-webpack/utils/ast-utils': { getMainModulePath: () => { return "fakePath"; } }, 'nativescript-dev-webpack/plugins/NativeScriptAngularCompilerPlugin': { getAngularCompilerPlugin: () => { return AngularCompilerStub; } }, + 'nativescript-hook': (dir) => { return { findProjectDir: (dir) => dir } }, '@ngtools/webpack': { AngularCompilerPlugin: AngularCompilerStub }, From 2da007671addc84805626bdf8868f74de52e6668 Mon Sep 17 00:00:00 2001 From: soarer100 Date: Thu, 16 May 2019 05:35:51 -0600 Subject: [PATCH 4/8] Fix webpack.javascript.template --- projectFilesManager.js | 4 ++-- projectHelpers.js | 9 ++++++--- templates/webpack.javascript.js | 3 ++- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/projectFilesManager.js b/projectFilesManager.js index 67da224a..62ed9e20 100644 --- a/projectFilesManager.js +++ b/projectFilesManager.js @@ -1,11 +1,11 @@ const path = require("path"); const fs = require("fs"); -const { getNsConfig, getWebpackConfigPath, isTypeScript, isAngular, isVue, setWebpackConfigPath } = require("./projectHelpers"); +const { getNsConfigPath, getWebpackConfigPath, isTypeScript, isAngular, isVue, setWebpackConfigPath } = require("./projectHelpers"); function addProjectFiles(projectDir) { - const nsConfig = JSON.parse(fs.readFileSync(getNsConfig())); + const nsConfig = getNsConfigPath() ? JSON.parse(fs.readFileSync(getNsConfigPath())) : undefined; setWebpackConfigPath(nsConfig && nsConfig.webpackConfig ? nsConfig.webpackConfig : undefined); const projectTemplates = getProjectTemplates(projectDir); Object.keys(projectTemplates).forEach(function(templateName) { diff --git a/projectHelpers.js b/projectHelpers.js index 98d4aabd..920b38e6 100644 --- a/projectHelpers.js +++ b/projectHelpers.js @@ -104,8 +104,11 @@ function setWebpackConfigPath(path) { } } -function getNsConfig() { - return resolve(getProjectDir(), "nsconfig.json") +function getNsConfigPath() { + const nsConfigPath = resolve(getProjectDir(__dirname), "nsconfig.json"); + if (fs.existsSync(nsConfigPath)) { + return nsConfigPath; + } } function getWebpackConfigPath() { @@ -117,7 +120,7 @@ const isWindows = process.platform.startsWith("win32"); module.exports = { getAppPathFromProjectData, getAppResourcesPathFromProjectData, - getNsConfig, + getNsConfigPath, getPackageJson, getProjectDir, getWebpackConfigPath, diff --git a/templates/webpack.javascript.js b/templates/webpack.javascript.js index 5f5691df..4d1ade7d 100644 --- a/templates/webpack.javascript.js +++ b/templates/webpack.javascript.js @@ -3,6 +3,7 @@ const { join, relative, resolve, sep } = require("path"); const webpack = require("webpack"); const nsWebpack = require("nativescript-dev-webpack"); const nativescriptTarget = require("nativescript-dev-webpack/nativescript-target"); +const hook = require("nativescript-hook")(__dirname); const CleanWebpackPlugin = require("clean-webpack-plugin"); const CopyWebpackPlugin = require("copy-webpack-plugin"); const { BundleAnalyzerPlugin } = require("webpack-bundle-analyzer"); @@ -23,7 +24,7 @@ module.exports = env => { } const platforms = ["ios", "android"]; - const projectRoot = __dirname; + const projectRoot = hook.findProjectDir(__dirname) || __dirname; // Default destination inside platforms//... const dist = resolve(projectRoot, nsWebpack.getAppPath(platform, projectRoot)); From b09534f9c176edc0778297f9ba051581e5ec9658 Mon Sep 17 00:00:00 2001 From: soarer100 Date: Thu, 16 May 2019 05:48:04 -0600 Subject: [PATCH 5/8] Fix webpack.typescript.js template --- templates/webpack.typescript.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/templates/webpack.typescript.js b/templates/webpack.typescript.js index ae521f8f..cafd543d 100644 --- a/templates/webpack.typescript.js +++ b/templates/webpack.typescript.js @@ -3,6 +3,7 @@ const { join, relative, resolve, sep } = require("path"); const webpack = require("webpack"); const nsWebpack = require("nativescript-dev-webpack"); const nativescriptTarget = require("nativescript-dev-webpack/nativescript-target"); +const hook = require("nativescript-hook")(__dirname); const CleanWebpackPlugin = require("clean-webpack-plugin"); const CopyWebpackPlugin = require("copy-webpack-plugin"); const { BundleAnalyzerPlugin } = require("webpack-bundle-analyzer"); @@ -23,7 +24,7 @@ module.exports = env => { } const platforms = ["ios", "android"]; - const projectRoot = __dirname; + const projectRoot = hook.findProjectDir(__dirname) || __dirname; // Default destination inside platforms//... const dist = resolve(projectRoot, nsWebpack.getAppPath(platform, projectRoot)); From 9a27b9c8ede3ab1dd8dcf98d056b6dd23523e275 Mon Sep 17 00:00:00 2001 From: soarer100 Date: Thu, 16 May 2019 05:50:21 -0600 Subject: [PATCH 6/8] Fix webpack.vue.js template --- templates/webpack.vue.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/templates/webpack.vue.js b/templates/webpack.vue.js index 7f3ae42c..a012672b 100644 --- a/templates/webpack.vue.js +++ b/templates/webpack.vue.js @@ -11,6 +11,7 @@ const NsVueTemplateCompiler = require("nativescript-vue-template-compiler"); const nsWebpack = require("nativescript-dev-webpack"); const nativescriptTarget = require("nativescript-dev-webpack/nativescript-target"); +const hook = require("nativescript-hook")(__dirname); const { NativeScriptWorkerPlugin } = require("nativescript-worker-loader/NativeScriptWorkerPlugin"); const hashSalt = Date.now().toString(); @@ -27,7 +28,7 @@ module.exports = env => { } const platforms = ["ios", "android"]; - const projectRoot = __dirname; + const projectRoot = hook.findProjectDir(__dirname) || __dirname; // Default destination inside platforms//... const dist = resolve(projectRoot, nsWebpack.getAppPath(platform, projectRoot)); From 40b624e8c7e9decb6e288e8084b76ab1f7ce86b0 Mon Sep 17 00:00:00 2001 From: soarer100 Date: Thu, 16 May 2019 05:56:03 -0600 Subject: [PATCH 7/8] Small fix --- lib/compiler.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/compiler.js b/lib/compiler.js index daa3274c..c530b3c8 100644 --- a/lib/compiler.js +++ b/lib/compiler.js @@ -5,8 +5,8 @@ const { existsSync } = require("fs"); const readline = require("readline"); const { messages } = require("../plugins/WatchStateLoggerPlugin"); -const { buildEnvData, debuggingEnabled, getUpdatedEmittedFiles } = require("./utils"); const { getWebpackConfigPath, setWebpackConfigPath } = require("../projectHelpers"); +const { buildEnvData, debuggingEnabled, getUpdatedEmittedFiles } = require("./utils"); let hasBeenInvoked = false; From 4bd1fa24038e5ee56578a5bc76fce2b7ab80571b Mon Sep 17 00:00:00 2001 From: soarer100 Date: Thu, 16 May 2019 07:14:27 -0600 Subject: [PATCH 8/8] Small fix --- projectFilesManager.js | 1 - 1 file changed, 1 deletion(-) diff --git a/projectFilesManager.js b/projectFilesManager.js index 62ed9e20..d9712b2a 100644 --- a/projectFilesManager.js +++ b/projectFilesManager.js @@ -3,7 +3,6 @@ const fs = require("fs"); const { getNsConfigPath, getWebpackConfigPath, isTypeScript, isAngular, isVue, setWebpackConfigPath } = require("./projectHelpers"); - function addProjectFiles(projectDir) { const nsConfig = getNsConfigPath() ? JSON.parse(fs.readFileSync(getNsConfigPath())) : undefined; setWebpackConfigPath(nsConfig && nsConfig.webpackConfig ? nsConfig.webpackConfig : undefined);