Skip to content
This repository was archived by the owner on Aug 7, 2021. It is now read-only.

feat(webpack-config): implement pass webpack config path #894

Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion lib/compiler.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ const { existsSync } = require("fs");
const readline = require("readline");

const { messages } = require("../plugins/WatchStateLoggerPlugin");
const { getWebpackConfigPath, setWebpackConfigPath } = require("../projectHelpers");
const { buildEnvData, debuggingEnabled, getUpdatedEmittedFiles } = require("./utils");

let hasBeenInvoked = false;
Expand Down Expand Up @@ -51,10 +52,14 @@ exports.runWebpackCompiler = function runWebpackCompiler(config, $projectData, $
const envData = buildEnvData($projectData, platform, env);
const envParams = buildEnvCommandLineParams(config, envData, $logger);

if ($projectData.nsConfig && $projectData.nsConfig.webpackConfig) {
setWebpackConfigPath($projectData.nsConfig.webpackConfig);
}

const args = [
"--preserve-symlinks",
pathResolve(projectDir, "node_modules", "webpack", "bin", "webpack.js"),
`--config=${pathResolve(projectDir, "webpack.config.js")}`,
`--config=${pathResolve(projectDir, getWebpackConfigPath())}`,
...(config.watch ? ["--watch"] : []),
...envParams,
].filter(a => !!a);
Expand Down
11 changes: 9 additions & 2 deletions projectFilesManager.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
const path = require("path");
const fs = require("fs");

const { isTypeScript, isAngular, isVue } = require("./projectHelpers");
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);
const projectTemplates = getProjectTemplates(projectDir);
Object.keys(projectTemplates).forEach(function(templateName) {
const templateDestination = projectTemplates[templateName];
Expand Down Expand Up @@ -52,12 +54,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;
Expand Down
22 changes: 22 additions & 0 deletions projectHelpers.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ const PROJECT_DATA_GETTERS = {
appResourcesPath: "getAppResourcesRelativeDirectoryPath",
};

let webpackConfigPath = 'webpack.config.js';

const isTypeScript = ({ projectDir, packageJson } = {}) => {
packageJson = packageJson || getPackageJson(projectDir);

Expand Down Expand Up @@ -96,13 +98,32 @@ function convertSlashesInPath(modulePath) {
return modulePath;
}

function setWebpackConfigPath(path) {
if (path) {
webpackConfigPath = path;
}
}

function getNsConfigPath() {
const nsConfigPath = resolve(getProjectDir(__dirname), "nsconfig.json");
if (fs.existsSync(nsConfigPath)) {
return nsConfigPath;
}
}

function getWebpackConfigPath() {
return webpackConfigPath;
}

const isWindows = process.platform.startsWith("win32");

module.exports = {
getAppPathFromProjectData,
getAppResourcesPathFromProjectData,
getNsConfigPath,
getPackageJson,
getProjectDir,
getWebpackConfigPath,
isAndroid,
isIos,
isAngular,
Expand All @@ -112,4 +133,5 @@ module.exports = {
convertSlashesInPath,
getIndentationCharacter,
safeGet,
setWebpackConfigPath,
};
5 changes: 3 additions & 2 deletions templates/webpack.angular.js
Original file line number Diff line number Diff line change
Expand Up @@ -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");
Expand All @@ -28,7 +29,7 @@ module.exports = env => {
}

const AngularCompilerPlugin = getAngularCompilerPlugin(platform);
const projectRoot = __dirname;
const projectRoot = hook.findProjectDir(__dirname) || __dirname;

// Default destination inside platforms/<platform>/...
const dist = resolve(projectRoot, nsWebpack.getAppPath(platform, projectRoot));
Expand Down Expand Up @@ -56,7 +57,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 };
Expand Down
1 change: 1 addition & 0 deletions templates/webpack.config.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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
},
Expand Down
3 changes: 2 additions & 1 deletion templates/webpack.javascript.js
Original file line number Diff line number Diff line change
Expand Up @@ -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");
Expand All @@ -23,7 +24,7 @@ module.exports = env => {
}

const platforms = ["ios", "android"];
const projectRoot = __dirname;
const projectRoot = hook.findProjectDir(__dirname) || __dirname;

// Default destination inside platforms/<platform>/...
const dist = resolve(projectRoot, nsWebpack.getAppPath(platform, projectRoot));
Expand Down
3 changes: 2 additions & 1 deletion templates/webpack.typescript.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin');
Expand All @@ -24,7 +25,7 @@ module.exports = env => {
}

const platforms = ["ios", "android"];
const projectRoot = __dirname;
const projectRoot = hook.findProjectDir(__dirname) || __dirname;

// Default destination inside platforms/<platform>/...
const dist = resolve(projectRoot, nsWebpack.getAppPath(platform, projectRoot));
Expand Down
3 changes: 2 additions & 1 deletion templates/webpack.vue.js
Original file line number Diff line number Diff line change
Expand Up @@ -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();

Expand All @@ -27,7 +28,7 @@ module.exports = env => {
}

const platforms = ["ios", "android"];
const projectRoot = __dirname;
const projectRoot = hook.findProjectDir(__dirname) || __dirname;

// Default destination inside platforms/<platform>/...
const dist = resolve(projectRoot, nsWebpack.getAppPath(platform, projectRoot));
Expand Down