webpack.config.js 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. const path = require('path')
  2. const nodeExternals = require('webpack-node-externals')
  3. const CopyWebpackPlugin = require('copy-webpack-plugin')
  4. module.exports = {
  5. entry: {
  6. 'api/cli': './src/api/cli.ts',
  7. 'api/init': './src/api/init.ts',
  8. 'api/recipes': './src/api/recipes/index.ts',
  9. 'api/recipes/install': './src/api/recipes/install.ts',
  10. 'api/tauricon': './src/api/tauricon.ts',
  11. 'api/info': './src/api/info.ts',
  12. 'api/dependency-manager': './src/api/dependency-manager/index.ts',
  13. 'helpers/spawn': './src/helpers/spawn.ts',
  14. 'helpers/rust-cli': './src/helpers/rust-cli.ts'
  15. },
  16. mode: process.env.NODE_ENV || 'development',
  17. devtool: 'source-map',
  18. module: {
  19. rules: [
  20. {
  21. test: /\.tsx?$/,
  22. use: 'ts-loader',
  23. exclude: /node_modules/
  24. },
  25. {
  26. test: /(templates|api)[\\/].+\.js/,
  27. use: 'raw-loader'
  28. },
  29. {
  30. test: /\.toml?$/,
  31. use: 'toml-loader'
  32. }
  33. ]
  34. },
  35. node: false,
  36. resolve: {
  37. extensions: ['.ts', '.js']
  38. },
  39. output: {
  40. library: 'tauri',
  41. libraryTarget: 'umd',
  42. filename: '[name].js',
  43. path: path.resolve(__dirname, 'dist')
  44. },
  45. externals: [nodeExternals()],
  46. target: 'node',
  47. plugins: [
  48. new CopyWebpackPlugin({
  49. patterns: [
  50. {
  51. from: './src/types/config.validator.ts',
  52. to: '../src/types/config.schema.json',
  53. transform(content) {
  54. return schemaParser('TauriConfigSchema', content.toString())
  55. }
  56. }
  57. ]
  58. })
  59. ]
  60. }
  61. function schemaParser(schemaName, content) {
  62. const lines = content.split('\n')
  63. const output = []
  64. for (const line of lines) {
  65. if (line === `export const ${schemaName} = {`) {
  66. output.push('{')
  67. } else if (output.length) {
  68. if (line === '}') {
  69. output.push('}')
  70. break
  71. }
  72. output.push(line)
  73. }
  74. }
  75. const json = output.join('\n')
  76. const object = eval(`(${json})`)
  77. return JSON.stringify(object, null, 2)
  78. }