diff --git a/.vscode/launch.json b/.vscode/launch.json index 6630c1b045..38d723ead5 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -94,7 +94,8 @@ "${workspaceRoot}/Composer/packages/electron-server/build/**/*.js", "${workspaceRoot}/Composer/packages/server/build/**/*.js", "${workspaceRoot}/extensions/**/*.js" - ] + ], + "sourceMaps": true }, { "name": "Debug current jest test", diff --git a/extensions/pvaPublish/package.json b/extensions/pvaPublish/package.json index 967ea30a56..9c7d83b669 100644 --- a/extensions/pvaPublish/package.json +++ b/extensions/pvaPublish/package.json @@ -2,7 +2,8 @@ "name": "pva-publish-composer", "version": "1.0.0", "scripts": { - "build": "yarn clean && webpack", + "build": "yarn clean && cross-env NODE_ENV=production webpack", + "build:dev": "yarn clean && cross-env NODE_ENV=development webpack", "clean": "rimraf lib", "test": "yarn test:node && yarn test:ui", "test:node": "jest --config jest.config.node.js", @@ -28,9 +29,9 @@ }, "main": "lib/node/index.js", "dependencies": { - "@botframework-composer/types": "file:../../Composer/packages/types", "@bfc/extension": "file:../../Composer/packages/extension", "@bfc/extension-client": "file:../../Composer/packages/extension-client", + "@botframework-composer/types": "file:../../Composer/packages/types", "@uifabric/icons": "7.3.59", "@uifabric/react-hooks": "7.4.12", "debug": "^4.2.0", @@ -47,6 +48,7 @@ "@botframework-composer/test-utils": "^0.0.1", "@types/jest": "^26.0.15", "@types/node": "^14.11.2", + "cross-env": "^7.0.2", "jest": "^26.6.0", "mini-svg-data-uri": "^1.2.3", "rimraf": "^3.0.2", diff --git a/extensions/pvaPublish/tsconfig.json b/extensions/pvaPublish/tsconfig.json index 9cdc9ef4a3..e139468fca 100644 --- a/extensions/pvaPublish/tsconfig.json +++ b/extensions/pvaPublish/tsconfig.json @@ -1,7 +1,8 @@ { "compilerOptions": { "esModuleInterop": true, - "jsx": "react" + "jsx": "react", + "sourceMap": true }, "include": [ "src/**/*", diff --git a/extensions/pvaPublish/webpack.config.js b/extensions/pvaPublish/webpack.config.js index dfb18f8025..f1ce9cdbc3 100644 --- a/extensions/pvaPublish/webpack.config.js +++ b/extensions/pvaPublish/webpack.config.js @@ -1,54 +1,66 @@ const { resolve } = require('path'); const svgToMiniDataURI = require('mini-svg-data-uri'); -module.exports = [ - { - entry: './src/ui/index.tsx', - mode: 'production', - output: { - filename: 'publish-bundle.js', - path: resolve(__dirname, 'lib', 'ui'), - }, - externals: { - // expect react & react-dom to be available in the extension host iframe - react: 'React', - 'react-dom': 'ReactDOM', - }, - module: { - rules: [ - { - test: /\.tsx?$/, - loader: 'ts-loader', - }, - { - test: /\.svg$/i, - loader: 'url-loader', - options: { - generator: (content) => svgToMiniDataURI(content.toString()), +function getWebpackConfigs() { + const isDevelopment = process.env.NODE_ENV === 'development'; + console.log(`[pvaPublish] Generating ${isDevelopment ? 'development' : 'production'} bundles.`); + + return [ + { + entry: './src/ui/index.tsx', + mode: isDevelopment ? 'development' : 'production', + devtool: isDevelopment ? 'source-map' : undefined, + output: { + filename: 'publish-bundle.js', + path: resolve(__dirname, 'lib', 'ui'), + }, + externals: { + // expect react & react-dom to be available in the extension host iframe + react: 'React', + 'react-dom': 'ReactDOM', + }, + module: { + rules: [ + { + test: /\.tsx?$/, + loader: 'ts-loader', }, - }, - ], - }, - resolve: { - extensions: ['.js', '.ts', '.tsx'], - }, - plugins: [], - }, - { - entry: './src/node/index.ts', - mode: 'production', - devtool: 'source-map', - target: 'node', - output: { - path: resolve(__dirname, 'lib', 'node'), - filename: 'index.js', - libraryTarget: 'commonjs2', - }, - module: { - rules: [{ test: /\.tsx?$/, use: 'ts-loader', exclude: [/node_modules/] }], + { + test: /\.svg$/i, + loader: 'url-loader', + options: { + generator: (content) => svgToMiniDataURI(content.toString()), + }, + }, + ], + }, + resolve: { + extensions: ['.js', '.ts', '.tsx'], + }, + plugins: [], }, - resolve: { - extensions: ['.js', '.ts', '.tsx'], + { + entry: './src/node/index.ts', + mode: isDevelopment ? 'development' : 'production', + target: 'node', + devtool: isDevelopment ? 'source-map' : undefined, + output: { + path: resolve(__dirname, 'lib', 'node'), + filename: 'index.js', + libraryTarget: 'commonjs2', + /** + * Node files aren't being loaded by Webpack, so we want the source maps to point to the files on disk + */ + devtoolModuleFilenameTemplate: isDevelopment ? '[absolute-resource-path]' : undefined, + }, + module: { + rules: [{ test: /\.tsx?$/, use: 'ts-loader', exclude: [/node_modules/] }], + }, + resolve: { + extensions: ['.js', '.ts', '.tsx'], + }, }, - }, -]; + ]; +} + +module.exports = getWebpackConfigs(); diff --git a/extensions/pvaPublish/yarn.lock b/extensions/pvaPublish/yarn.lock index de99390695..013dcceeca 100644 --- a/extensions/pvaPublish/yarn.lock +++ b/extensions/pvaPublish/yarn.lock @@ -2659,6 +2659,13 @@ create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: safe-buffer "^5.0.1" sha.js "^2.4.8" +cross-env@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-7.0.2.tgz#bd5ed31339a93a3418ac4f3ca9ca3403082ae5f9" + integrity sha512-KZP/bMEOJEDCkDQAyRhu3RL2ZO/SUVrxQVI0G3YEQ+OLbRA3c6zgixe8Mq8a/z7+HKlNEjo8oiLUs8iRijY2Rw== + dependencies: + cross-spawn "^7.0.1" + cross-spawn@^6.0.0, cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" @@ -2670,7 +2677,7 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^7.0.0: +cross-spawn@^7.0.0, cross-spawn@^7.0.1: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==