@nx-plus/vue
Version:
Vue plugin for Nx
92 lines • 4.55 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const devkit_1 = require("@nrwl/devkit");
const utils_1 = require("../../utils");
const webpack_1 = require("../../webpack");
// eslint-disable-next-line @typescript-eslint/no-var-requires
const Service = require('@vue/cli-service/lib/Service');
// eslint-disable-next-line @typescript-eslint/no-var-requires
const { resolvePkg } = require('@vue/cli-shared-utils/lib/pkg');
const devServerBuilderOverriddenKeys = [
'mode',
'skipPlugins',
'publicPath',
'css',
'stdin',
];
function runExecutor(options, context) {
return tslib_1.__asyncGenerator(this, arguments, function* runExecutor_1() {
// The `css` option must be `undefined` in order for the
// browser builder option to serve as the default. JSON
// Schema does not support setting a default value of
// `undefined`.
// TODO: Handle this less obtrusively.
if (options.css &&
options.css.extract === undefined &&
options.css.sourceMap === undefined &&
!Object.keys(options.css.loaderOptions).length) {
options.css = undefined;
}
const browserTarget = (0, devkit_1.parseTargetString)(options.browserTarget);
const rawBrowserOptions = (0, devkit_1.readTargetOptions)(browserTarget, context);
const overrides = Object.entries(options)
.filter(([key, val]) => val !== undefined && devServerBuilderOverriddenKeys.includes(key))
.reduce((previous, [key, val]) => (Object.assign(Object.assign({}, previous), { [key]: val })), {});
const browserOptions = Object.assign(Object.assign({}, rawBrowserOptions), overrides);
const projectRoot = (0, utils_1.getProjectRoot)(context);
const babelConfig = yield tslib_1.__await((0, utils_1.getBabelConfig)(projectRoot));
const inlineOptions = {
chainWebpack: (config) => {
(0, webpack_1.modifyIndexHtmlPath)(config, browserOptions, context);
(0, webpack_1.modifyEntryPoint)(config, browserOptions, context);
(0, webpack_1.modifyTsConfigPaths)(config, browserOptions, context);
(0, webpack_1.modifyTypescriptAliases)(config, browserOptions, context);
if (babelConfig) {
(0, webpack_1.modifyBabelLoader)(config, babelConfig);
}
if (!options.watch) {
// There is no option to disable file watching in `webpack-dev-server`,
// but webpack's file watcher can be overriden.
config.plugin('vue-cli').use({
apply: (compiler) => {
compiler.hooks.afterEnvironment.tap('vue-cli', () => {
// eslint-disable-next-line @typescript-eslint/no-empty-function
compiler.watchFileSystem = { watch: () => { } };
});
},
});
}
},
publicPath: browserOptions.publicPath,
filenameHashing: browserOptions.filenameHashing,
css: browserOptions.css,
configureWebpack: yield tslib_1.__await((0, utils_1.resolveConfigureWebpack)(projectRoot)),
devServer: options.devServer,
transpileDependencies: options.transpileDependencies,
};
(0, utils_1.checkUnsupportedConfig)(context, projectRoot);
const service = new Service(projectRoot, {
pkg: resolvePkg(context.root),
inlineOptions,
});
const { url: baseUrl } = yield tslib_1.__await(service.run('serve', {
open: options.open,
copy: options.copy,
stdin: options.stdin,
mode: browserOptions.mode,
host: options.host,
port: options.port,
https: options.https,
public: options.public,
transpileDependencies: options.transpileDependencies,
'skip-plugins': browserOptions.skipPlugins,
}, ['serve']));
yield yield tslib_1.__await({ success: true, baseUrl });
// This Promise intentionally never resolves, leaving the process running
// eslint-disable-next-line @typescript-eslint/no-empty-function
yield tslib_1.__await(new Promise(() => { }));
});
}
exports.default = runExecutor;
//# sourceMappingURL=executor.js.map