From 01365dbe260a751dc4baf8a18b8bdd514a79229e Mon Sep 17 00:00:00 2001 From: Johannes Rieken Date: Mon, 20 Aug 2018 15:23:56 +0200 Subject: [PATCH] webpack - more defaults for extensions --- extensions/emmet/extension.webpack.config.js | 6 +- extensions/git/extension.webpack.config.js | 9 +-- extensions/shared.webpack.config.js | 79 +++++++++++++++++--- package.json | 1 + yarn.lock | 8 +- 5 files changed, 83 insertions(+), 20 deletions(-) diff --git a/extensions/emmet/extension.webpack.config.js b/extensions/emmet/extension.webpack.config.js index 55b15a2701a..b86756e4aa8 100644 --- a/extensions/emmet/extension.webpack.config.js +++ b/extensions/emmet/extension.webpack.config.js @@ -5,14 +5,14 @@ 'use strict'; -const sharedConfig = require('../shared.webpack.config'); +const withDefaults = require('../shared.webpack.config'); const myConfig = { + context: __dirname, entry: { extension: './src/extension.ts', }, externals: { - 'vscode': 'commonjs vscode', // ignored because it doesn't exist '@emmetio/css-parser': 'commonjs @emmetio/css-parser', '@emmetio/html-matcher': 'commonjs @emmetio/html-matcher', '@emmetio/math-expression': 'commonjs @emmetio/math-expression', @@ -21,4 +21,4 @@ const myConfig = { }, }; -module.exports = { ...sharedConfig(__dirname), ...myConfig }; +module.exports = withDefaults(myConfig); diff --git a/extensions/git/extension.webpack.config.js b/extensions/git/extension.webpack.config.js index 75643a14039..44e0d7dff17 100644 --- a/extensions/git/extension.webpack.config.js +++ b/extensions/git/extension.webpack.config.js @@ -5,10 +5,11 @@ 'use strict'; -const sharedConfig = require('../shared.webpack.config'); +const withDefaults = require('../shared.webpack.config'); const CopyWebpackPlugin = require('copy-webpack-plugin'); const myConfig = { + context: __dirname, node: { __dirname: false // leave the __dirname-behaviour intact }, @@ -18,12 +19,10 @@ const myConfig = { }, plugins: [ new CopyWebpackPlugin([ - { from: './out/*.sh', to: '[name].sh' }, - { from: './out/nls.*.json', to: '[name].json' } + { from: './out/*.sh', to: '[name].sh' } ]) ], externals: { - 'vscode': 'commonjs vscode', // ignored because it doesn't exist "byline": 'commonjs byline', "file-type": 'commonjs file-type', "iconv-lite": 'commonjs iconv-lite', @@ -34,4 +33,4 @@ const myConfig = { }, }; -module.exports = { ...sharedConfig(__dirname), ...myConfig }; +module.exports = withDefaults(myConfig); diff --git a/extensions/shared.webpack.config.js b/extensions/shared.webpack.config.js index bbb8e580f7e..7195a844fc8 100644 --- a/extensions/shared.webpack.config.js +++ b/extensions/shared.webpack.config.js @@ -6,15 +6,11 @@ 'use strict'; const path = require('path'); +const CopyWebpackPlugin = require('copy-webpack-plugin'); +const merge = require('merge-options'); -/** - * Function that must be invoked with __dirname and that - * returns a good default configuation for extensions that - * want to do webpack - */ -module.exports = function (extensionDir) { - return { - context: extensionDir, +module.exports = function withDefaults(extConfig) { + let defaultConfig = { mode: 'none', // this leaves the source code as close as possible to the original (when packaging we set this to 'production') target: 'node', // extensions run in a node context resolve: { @@ -43,14 +39,75 @@ module.exports = function (extensionDir) { }] }] }, + plugins: [ + new CopyWebpackPlugin([{ from: './out/nls.*.json', to: '[name].json' }]) // copy nls files + ], + externals: { + 'vscode': 'commonjs vscode', // ignored because it doesn't exist + }, output: { // all output goes into `dist`. // packaging depends on that and this must always be like it filename: '[name].js', - path: path.join(extensionDir, 'dist'), + path: path.join(extConfig.context, 'dist'), libraryTarget: "commonjs", }, // yes, really source maps devtool: 'source-map' - }; -}; + } + + return merge(defaultConfig, extConfig); +} + +// /** +// * Function that must be invoked with __dirname and that +// * returns a good default configuation for extensions that +// * want to do webpack +// */ +// module.exports = function (extensionDir) { +// return { +// context: extensionDir, +// mode: 'none', // this leaves the source code as close as possible to the original (when packaging we set this to 'production') +// target: 'node', // extensions run in a node context +// resolve: { +// mainFields: ['main'], // prefer the main-entry of package.json files +// extensions: ['.ts', '.js'] // support ts-files and js-files +// }, +// module: { +// rules: [{ +// test: /\.ts$/, +// exclude: /node_modules/, +// use: [{ +// // vscode-nls-dev loader: +// // * rewrite nls-calls +// loader: 'vscode-nls-dev/lib/webpack-loader' +// }, { +// // configure TypeScript loader: +// // * only transpile because we have a separate compilation pipeline +// // * enable sources maps for end-to-end source maps +// loader: 'ts-loader', +// options: { +// transpileOnly: true, +// compilerOptions: { +// "sourceMap": true, +// } +// } +// }] +// }] +// }, +// plugins: [ +// new CopyWebpackPlugin([ +// { from: './out/nls.*.json', to: '[name].json' } +// ]) +// ], +// output: { +// // all output goes into `dist`. +// // packaging depends on that and this must always be like it +// filename: '[name].js', +// path: path.join(extensionDir, 'dist'), +// libraryTarget: "commonjs", +// }, +// // yes, really source maps +// devtool: 'source-map' +// }; +// }; diff --git a/package.json b/package.json index 864d2fa74c6..136b3a54767 100644 --- a/package.json +++ b/package.json @@ -102,6 +102,7 @@ "istanbul": "^0.3.17", "jsdom-no-contextify": "^3.1.0", "lazy.js": "^0.4.2", + "merge-options": "^1.0.1", "mime": "^1.4.1", "minimatch": "^2.0.10", "mkdirp": "^0.5.0", diff --git a/yarn.lock b/yarn.lock index 071f2d8c7c9..a791e42fb98 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3909,7 +3909,7 @@ is-path-inside@^1.0.0: dependencies: path-is-inside "^1.0.1" -is-plain-obj@^1.0.0: +is-plain-obj@^1.0.0, is-plain-obj@^1.1: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" @@ -4724,6 +4724,12 @@ merge-descriptors@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" +merge-options@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-options/-/merge-options-1.0.1.tgz#2a64b24457becd4e4dc608283247e94ce589aa32" + dependencies: + is-plain-obj "^1.1" + merge-stream@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1"