diff --git a/cmd/cmd-mewn.go b/cmd/cmd-mewn.go index 7bb0a198..b7b91c35 100644 --- a/cmd/cmd-mewn.go +++ b/cmd/cmd-mewn.go @@ -5,6 +5,6 @@ package cmd import "github.com/leaanthony/mewn" func init() { - mewn.AddAsset(".", "../runtime/assets/bridge.js", "1f8b08000000000000ffac396973e2ba969fe157e8f5ad2ec825c1ecebcdad318610920061cbc29b5719611f6c115b3696c04077fefb946c03269d74f79d9a749358d2d9755623fd19472f28f879091f5ec2a7f877f4dddf9090f4f2f2825e922f67fed38b7f227d170702f67fa4f0e945122792f82f7082eda4a07686e2df5f5e24f1f9ef9797f317c9ff2730108a8f0d4026d10dee81f88de62eb6c0b3dd5734b75de4c1ecc224af80b0e3b078523d437780914cb961d32dca65b2d50bc7050694c7ff94e2d29f68c10c423902b60697119bd65009fd29c5e3f3155539b1292294f0e419fa168f49126ab844d301d9b305a83c1ef308d56c2fed6162b25970742920632ea836a5a0f2fe1a5c136f6b88ae4cf33c7a322616b83594cf64c4b6c726c3bb1a4a78ac26490994422169d356b110236dd88c536c014aa1442d5fc8668b52c03121d0439ac4a6238e391cd9a9369d13bd86bebdf95c60c66cf5157804009be60cabafc71d3b10f97adcbdabc563b158e22f8dac916a62c62ebff8aa5e1c94b80881bffcfd1b4017aa4d3950fe7bc09c7013befcfd288e43bbff256964fdf75f33f7b7089836d608d599432805f7cbdfefb089f639aa058c613de0ce09d57dd7125602aa856422bf1311ab29a35160b4f427b4bf393623e2a26a73b201adce6da796a99b30e7b54cdd231a376ad94ce66bddf0bd3b78169c75d75e51ade6ea339ccc9c8b7fe9d2597d6e537e31c71631b7358629bb60e092795d23cc115e476d0af5dd05a11a6c6a55ffe7ed33c1f6b7f3cdc19ab05b2d977136289f7136750e1b7e814da2d39a0a94831b0a9acb80553fe8e382893959c341f40258f599ed6ae05eb858232b56cb8255b7b0ab135a2b7e4578c56d94896877a1daa6edd6fe98cfe7f599bdb96006d66caf967536487c02819c4d1483585887daca35931ae6b8e62f2587eaf51966502a9c9387467fe8656edbba2dcbb2dc1b4d8cd644976559a988f54a91bb6271efcce4b2d8585e35ba0fad89fc0f7f5a0d79f0d1f37e2d3e4dd9eb8a47b1b7ffbbff89ae1559ef88cf7b988fe005dc3f95f5aa3178bc5516a5c020f9e1686c76e53bd259368dd7764366decde23ed3dedc977ac3c26355daf1c5b0d9351e27c54cbbaa17e1fa693d9b569f5a9dea663a56975333874dedd62e16079eadaca7137d6708c2ac7a336c5d4d465de899008fcb853c3126998682aff31d4ebceaee765ccda776ed4c6e709b352ca9787d955aeca637a5f9004aeaf6a9955ae8d5a7b25df536abadd9e9cc0be375ee219f9af5ddd6139d57346f20dd0e3aed662f278d5285bef5a03c3cdd4923b541e764b6990c979dc6f65e32fabd56c5ad8c53b366d71c542bb723b3fc5c31760b6754596797bc695456c579e576e0b49d39bdbf3796edca0dd87a2f5fbe5e5601f7729ba1d1f164dca66b8f55aeb22363b3bc2ddab31cf79e49f64aee360bee137be654916e5a6438330beac4551e0dda55ee8657603dc1ee69362b5607b7854779d4675689e61eb3a982d218e76e2cbe1b94e6cc9db557b3a1d4bb9a6939bdf89c2d5753454f6ab7aef12dbb5e3c2bc0cb8aee3e4df27c83dd9e527edef41f6e786751905ac35d579bce776a3e6b38a98ada2c41bb73a76377fa5c5d4db339436699fc7ade6856956c39ab8f8a7d6b57eeabeb8d7c37e8d0c2aa321c361a0d9591eae363ceb3fb55e2dce9f39df36ceaba9e9f0eb5617fa2546ec7e5c1dd72997facde368a8d9976f5a017aab9eaabe639a5d4124f6957517a0d6d91ea6d7bd9c74aa538dc4af25dbe59900733f6f050a0b642ba9252c9bf6e9f9795cc93d9949f07dcc5669f3477f650be366dfe68569639be583f9b7d5dd5b37265d1929d294e2999d2b8a1c9bbdc609df156d96c47da4dfbdb9b41a9e5b56197bbcfcd2af79d819b353c8fca53266f3cb930919ffbdba7c9a62b6d9c12bf9669a13db1eedbddea3057b11f36ba92016937b8b9e9949a5b633bcdbae5d56e38301cf5b1bc29afc7f871b4bb1db54b189c72f9d5b5c72d333fa96457a3073c1973bdd5e9cd950a389bd4a070551d398e79ddae145aaf25ab30949755697cf7da6fb89b2dac346d6a5cafdb1d27fbf434bfdae6a7f935f77a33f3b64d9a347593aae6d69e2737ae756351bea63b7394bd2ebe360a5579bad6daca954e1af7cb5275397fba77f3db546a4bccab4cbf5718566058668eccee9c69b5d85bca8f458e6759b5b07e9d5a256c025ea846d77b1e6b9dbbc160ecb572fd8742363bed561f77bcb9b85f9ad99c8a1ba4a4379dc9add5d40a93ec534f1b6ca685bbced3a0288dddc27db953e5cfea95dbbccd0759ccbc1abf8e56034b51cea209d8050730af513b7c8a9e1d4a4350353e2f3d7eadffe61733467650cb81f53970589c23e0d974fe6708a78dc037c726429a0b5803e52ca891613d4b17c1da97af6011d4af5aba001662b64934c45d4c99835da07c5fddc2b2956f95ca2d05fd0100feaf77c5af98f95ac794587e3f578b0885b20c9984027611a173d16fc2be4a8a12593f146421d1db7fbdc2d6ef79198ad0f8261a856fbe6c73dbb56aae2dfac064be94d1403f7b7bf37b14d3d66be8d0d8264343fabd6d4c74b7c04c42f98546189e99704145d917828963d5a6cc36216dda7a52ac6389af2af22d8ec2cef7ab8a44e31a52157d2af2b9c66289480383fec03893c964ea28b01af2ab3d3a3595a8f228137e44c5477b1b8846a08e8e578f32e9b20bd6878c32996af5578c42067b86bf6624f89cd5e3b1d85b3cf6568fbfc5e39284640d3b1c3434776d4b8c206b021eba40dcc0f495a11d0357877f45470a313e28a3515265cc37ff1abb084cb0d025d26c756501e569d505cca165825825138c6f4d4808d60230cd80cb9cbb64b6e2904cf0ad03897394109d9aa432e6c391394a06b002756400f0e0aedf6da655c6c6b0e1e812a98cd5e3b1370426832328761ca09a6210534bbe134fe0f56c0d7c4d04d3b7401903b01655c65f7fff7edcd08187aab1c6768cf51eb62099106089b37f67fe538fc7c4f3096b21cbd9dee48acf9e218ca8ad012214710350d3b68e660e24f4a50be2f5dcb731503ede3a708e88761ecc1082f7390afbdfc37d689f5f4684ccded0440b6caba58940245a600b7174e0b187386c088bef9f23f01141043d91b5c43426a083a3003650eaf47684382ef0954b91b637d50838432bc7375098138f4662c0574e38a5260fbacf6c6d1b555facebc1911ff3c13c264c2b843ada59c09da38446d6c21b83841c8ea942b277b827aafd384ba72393683deecfdf1d3f72a29a2065348ac78e11f5391965343a78cf88633720139d2f235611e7c1e661f61f094b9d1831766a3c21e307ec0f4337baf467ecfa8750d1b7023f057cff6a217a4dcb15b8db1198a072db1569fad3313411f7b3d8e782ec5f25a04b719d2cdc052d11dec4c8b03d766a8da3f50cdb1bbe133330e3ef281464a67438c30afe33d3565f13bed3fbbcaf89069ff1368806ff9fbc457b10612d6b9ac8394c7589c311b7f75927ed9f0ec1b2d7c010e188cc1113c435e46051ad39b88830c4dd15a423e2624d1bf9b49201c973e4fa34028945bcb19fd5041fc70fad18fb594958e0353e0516db4a904dd065a88f3839c9d827b985f90e7e5413f96d14c5e6bee4b3a0fef916e977e3313f9945d589b17490b3fce00f4e8eb483921ade30a69a290c4955db225447c7203afa278b5ebb8fa004679fdfb7e85e12cade97c5fd856f7502b37cec3ce2443501bb1da1f01a9b1f259968fcfa183fcb04699baaa6cd44700582370f11f61ba8fb0e6b8fdc0dd69f607e10cfd1607e6ff1a3a18f51ffa3a18ff2fec2d6cd48ea08dce3c4e0bf972eff6f692a16fb380fd58fef4b936747038cddadf087f0641fdaa1b408d6e06e513e93b1184a6a30c72b93a3353657701684be6260aa03e20661c1febe25b130a128fa863878791c4d02bf34e5bbe2c0801f5cf1d8ce87312682eee7660dec1a82fff20ac0438f301bf9eb0f09b3c9f0ce37ea2f1dd776801ebc5639fafb2f11c1756da1f851d97d4689c520cdb8ed742c0b348239dcbbb683757fc64a865285201f9f38ae3f0736832b3d1cfca663c662fb6e6b8e4d06c1d69bffe74d24b4f38fda9ad3af00f62ef82ec2c2a03e1dd2440112e527f4240f10d1a9ed025a3084a926daf770b808d2638c7984abc661d44b6b98e37f67fe73a016743f2699b9d8dda28b10f95ffef7020c50c24bf86fb38f552a4a28cd4ca242327b16140641af677be150e8ae282716889a27c654d0cec383b9edfa71e102d6b6c8377e88ec6b107e1db18f3f3f7ab0e3c4dfdd49bae54fefe93e4d066d662de09238473f44c4a7c929d07e2804498417ff49f4ecc53a78dd67247b3627f3ada858d8714c127c7993f88957ed299f700de1df7c3f0a169f31bcf3d50e2f7218183de4377301bfd60f37c3c93c94871dee97fed6fd9efb6dcb07441b848a61f9406e1690f32788e0085da20f498614840a5f422a35f405a5f678673f5cf84bba075e089adc43fd2892824dd3cfda07a1d4a3507b633731c73f95ec1d67657f495102ef988745a1f603fa9dada75b2281251313fa4a6d8f1ede91881e0db9a0025983568bbe3e3944ea695f14cc2db3addf620bf3469ae0743a1dffb4e4f9d8e9745ac418e61caca07b0d01e3d182f8167f370725a3debf1f85f60365e08b620223fcc06884d7e09fee313f9e34f6b17e7980ab47d50c87b2d8c930762a5f47703d09ce7712fbe096adad4c48c3c6b15d2efa6981568fff6f000000ffffc3c33335cf1e0000") + mewn.AddAsset(".", "../runtime/assets/bridge.js", "1f8b08000000000000ffac597977e2ba92ff1b3e855edfd707724930fb7a73cf18430859206c5978f34e46d885adc4968d2530d09def3e475ec0a493ee7e73866e124b2a55957ea5da1ce9cf247a46c1e7397c780e9f92dfd1777f4242d2f3f3337a4e3f9ff84fcffe8af45d2c08daff91c2a76749ac48e2bfd8134ca705b71394fcfefc2c89ef7f3f3f9f3e4bfe3fb103a1e4c4006412dde01e889f68e1620b3cdb7d450bdb451ecccf4cf20a083b0e4ba6d513740318c9941b36dda2422e5f3f735c604079f24f2929fd895e98412847c0d6e03262d306aaa03fa56472b1a22a27364584129e3e41df920949422d97683a207bfe022a4f263c4235dbcb7a98986c1e2c9d0bca840baa4d29a87cb006d7c4db06a22bd33c8daf4c88056e0315733931edb1e9e8a681521e6b48520a6550c8dab4552cd4c81a36e3145b803228d5f8e7b833baefdc0d46937f4a81dc9460127226361d73cce12054b5e982e80df4edcd97057366abafc06304d834e7587d3dccd881e29793db9b46329148a4fed2c81aa92666ecfc8b7fe0b3fd51ce42e22f7fff06d1996a530e94ff1e3127dc842f7f3f88e510fdbf248dacfffe6beefe1603d3c61aa13a7308a5e07ef9fbdd6ea27dbed502c6b01e48e784eafe05132801d54236b19fa9186aca781c8096fd84f737c7664418aab1201bd09adc761ab9a6090bdec8353da271a391cfe5be360dff8e07cf42b2eeda2baa355c7d8ed3b953f12f5b39692e6ccacf16d822e6b6c13065670c5cb2686a8439e2ee519b42737746a8069b46ddffbc7da658649d6f0ed6046e8d42ced9a062ced934396cf81936894e1b2a500e6ea868210756737f1e174cccc91af6aa97c06ace6d5703f7ccc51a59b1461eaca6855d9dd046f92bc22b6ea35cec7467aa6dda6ee38fc562d19cdb9b336660cdf61a796783c43750c8d9c477100bebd058b9665ac31c37fca1e450bd39c70c2aa55372df1a8cbcdc7557b7655996fbe3a9d199eab22c2b35315e29f2ad18dc3973b92a269617addbfbce54fe0f3f9d963cfce8391a8b6f5bf66ec5a3988b7e479ff85891f59ef8bea7f9885ed0fda7ba5eb4860fd7ca4b2500a4381a4fcc5bf986f4966de3b5db929977f57297eb6eee2afd51e9a12eedf8cba87d6b3c4ccbb96e5d2fc3e5e37a3eab3f767af5cd6ca22e6766019bdab55d2e0f3d5b59cfa6face108c59fd6ad4b9988e6fa16f023c2c5fe4a931cdb5147c59ec71e2d577d7937a31b3ebe60ac3ebbc6149e5cb8bcccb6e7655590ca1a26e1f3b9917bdfe58b5ebde66b5357bbd4569b22edc1733f381db79a48b9ae60da5eb61afdbee17a471a634b0ee95fbc71b69acb6e882cc37d3d1b2d7dade49c6a0dfa9b9b54966debe3587f5daf5d8ac3ed58cdd8b33aeadf34bde366aabf2a2763d74bace82dedd19cb6eed0a6cbd5fac5e2eeb80fb85cdc8e87932eed2b5c76a17f9b1b1595e97ed79817b4f247f21dfb64bee237be25491ae3a6434374bead4551e0c7aabdc8c2ec07a84dde37c5eae0faf4b0ff278c0ac0a2d3ce43325a535295c597c37ac2c983befaee623a97f31d70a7af9295fad67ca9ed4ed5ce26b76f9f2a400af2abafb382df20d76fb4af56933b8bfe2bd9792d419ed6eb5d962a716f38693a9a9ed0a747b373a76674ff5d52c5f3064962bae17ad765dc957f3fab83cb076d581badec837c31e2dad6aa351abd55219a93f3c143c7b5027ce8dbed8394fa6aeebc5d9481b0da64aed7a521dde2c97c587fa75abdc9a6b17f77aa95ea8bf6a9e53c92cf18cde2a4abfa5bd64fadb7efea1562b8fb6927c536c97e4e19cdddf97a8ad905b49a9155fb74fcb5aeed16ccb4f43ee627340da3b7b245f9a367f306bcb027f593f99035dd5f372eda5233b339c517295494b937785e13ae7adf2f99eb49b0db657c34ac7ebc2ae705798d7ee7a43376f781e95674cde7872692a3f0db68fd3cdadb4712afc52a6a5eed4baebded647859a7dbfd1951c48bbe1d555afd2de1adb59deadae76a3a1e1a80fd54d753dc10fe3ddf5b85bc1e054abafae3de998c5692dbf1adfe3e984eb9d5e7fa1d4c0d96486a58bfad871cccb6eadd479ad58a591bcac4b939bd741cbdd6c61a56933e372dded39f9c7c7c5c5b6382baeb9d79f9bd75dd2a699ab4cbdb0f63cb975a91b2fd54bba33c7f9cbf26bab5497676badab5ce8a475b7acd4978bc73bb7b8cd64b6c4bcc80dfaa5510d4655e6c8ecc699d5cbfda5fc50e6789e574bebd79955c126e017d5b8f59e265aef66389c789dc2e0be94cfcf6eeb0f3bde7eb95b9af9828a5ba4a2b79de9b5d5d64ad3fc635f1b6e66a59bdee3b02c4ddcd25db557e74fea85dbbe2e0651ccbc98bc8e57434b514ee201d80507306f503b7c8aafed534390353e4f3d7eaeffe627334676d02880f53971989c63e4f96cf1671b8e0b816f8e4d843667b006ca599023c37c962d8315a5af6010e4af46b6041662b64934c45d4c99835da03cca6e61da2a762ad58e82fe0000ffc7bbe457ce7d6d624a2cbfaa6bc4944279864c4201bb88d085a83a21ca92224536f7095968f4f65fafb0f52b5f86623cbe8942e19bafdbc276ad866b8b3a305dace434d04fdedefc1ac5b4f506da97b7e91048bfc24d881a179849283fd308c37313cea848fb4231b1acda94d926644d5b4f8b7122f555453ee228ac7fbfaa4894af215751ad225f6a22918a1530e80f8c73b95cae8902d4909fedd1315422cba35cf815191f45188842a0890ea647b96cd505eb4341b95cbdfe2b41a18048e0af05093927cd6422f1964cbc35936fc9a4242159c30e070d2d5cdb128dc89a8087ce1037307d6568c7c0d5e11ff1c6423411ca789c5619f3e15f63178109163a479aadae2ca03cabba8039744c10a3748af1ad0929215a10661970997397cc571cd229be7520758a52a2529354c67c3ab240e980566c1d1b003cb0f5bbc9accad804361c9d2395b16632f186c0647020c58e0354530c626ae977ea897d7d5b03ff2442e85b701803b0163f8c3ffefefd30a1030f8fc65adb09d6fbd882744a90a54efe95fb77339910cf47a2852e2711e48a2f9e218ca8ad012214710350dbb60e30071afada05fe7aea630c944fb60e9c22a29d063d84907d8ac2fa776f0fed7363c4d84440132dc056cb12b19168011662692f23a2d84f08c4a3e7187d4c11c14f442dd18d09ea6029a00d0e756c1da18e0b7ce552a445508d8133b4727c80c298780089015f3961af9ade9f7d6e6bdbf8f1c5b8192cf93e1ff463025aa1d4016741778a521a598bdb1804e4b04d159abddb7b74b41f3bea6cac136d26fd2ebce77b4efc2448198f938983477dce46198ff7b767ccb11bb089f7973154c47a30b97f033016481d819838064fe8f881f87dd38dcefd1ebbf92155fcddc04f09dfbf60889b69b902773b0613546ebb224c7fda86a6927e14fb5c91e855023a17e664e12c68a9d01263c3f6d8311a07f40cdb1bbd533380f1770e1444a66cd8c30af973d3565f53fea5f7655f120d3e936d100dfe3f658bf220265ad634117398ea1287236e475127ebaf8ec0b2d7c010e1882c1013cc35e46091ad39b88830c4dd156463ea624d1bfbbcd201cb53e4fa3c028d85bfb19fe5047f8fef5a09f6b394f082d7f898584c2b413441e7e179c4ca51c43e8a2dccbfe0876322bf8ca2d88c523e0bf29f8fc8e03699f08359fc3809960d6296effcc1ca81779052430b63aa990248aada16a13a3a38d1e17eb2b8d9fd0d4ab0f6b9bd45f59252a2bb2cec17bed50960f9f8f28815d504ecf6c481d7d8fc28c8c4fdd7dff1b34890b5a96ada4c3857a0787bef61bfb135aab0a2cdb7c1f8939d1ff873dc99df237e00fae0f53f027dd0f71758b763a123b81e4780ff5eb8fcbf85a944e2e338d43cbc2f4d9f1c0098b85b711fc295c8b5436d11acc1dda2622e673194d660815726476b6caee024707dc5c05407c40dc282f9a824b130a128fe9e3878851c0f02bf84f25d7260c0f757f150ce873e269ceee7b006b886e4bf340178e801e6637ffc2163361dddf8a0fef2e2da0ed0fdad550ef7fd971bc1756d71f0c361a3889248409671dbe95916680473b8736d07eb7e8f950eb50a493e5e715cbf0f6c0726dd2ffce6c54c24a26a6b814d06c1d49bffeb4d04b4d38fca9ae33f044457f09d87854e7ddca4890424d24f78933c4044a7b60be885214c3551be87cd45101e13cc235c35f6ad5e56c31cff2bf7ef43cb17943f2699bbd8dda2b370f73ffc8e0f3340292fe5bfcf4e1c12559c579699448574fe24c80d3ecbbeed858da1bba29c5820f29e6855413b0d1716b6ebfb860b58db22df00d16eff18e1df242227f45d083bce0f5725dbf17bf8ec80a68362b311c8499da21ffce2f31815603012baa422fb7fe24591667b9e9f32eddb9c2cb6227561c73149f0b79c3dfb0f9d3ce47d2437daf016dcaccffdcc177ae39f3e34ea28403f92397701bf3693918d3859844ab183b1e9ef19fbd42f633ee2db225474cf078ef390a3df54048be81c7dc8b5195e0171922f21a306fa8232d1c6931fedff9ced8317d2a623b20ff452b069fab1fca0991ad32c82be8d39feb97aefa42b91cde21c7e5020cc178d1f39dcd87ab623825b3a35a5afd4f6e8fefd89a8df900b2a9035688df8ab95bd171fd74c414f33dffae5b7c039562067b3d9e4a7e9d0df9dcd6685eb61cec10a2adb9030194f966fc9773d523aee11519b14359bc1d514dd19e17b4163bc067f35daf97117128580f33d5d337eccb0614b1c356ac7faf584d423877da7b14f6ed9daca842c6c1cdbe5a2d616db9ac9ff0d0000fffff7a152d7f11e0000") mewn.AddAsset(".", "../runtime/js/runtime/init.js", "1f8b08000000000000ff548ccd4ec3301084cfec53cc3189680c1c90a04282231247242e488b9b6e89a96347b64b404ddf1dd96d0ff867359a99fd5443601c0f9f049f14cd988ba1a098195c715d149744cd39c8dd0f7552ac72a2f2cb3b47bbcab41a3433abfcdf992f59959b37007aed05d67cf669923cb1097a90c9872d363e6092d5c29aad408f63a4aaabf1221a4f2ef5defde2e6eafa6e310689e212358a5483afd81b9720f15b4234dedde3168d22524d4368f0ec4c32da9a2811a917bc696323c2ce253308a1741e471df480fd66e7ba64bc3ba0d3d6ae74b7a58c3adb85559da31a7bba988c5bfba99d32b4e5f67f614907a2c1af77565af9197d48110f05b2a4bf000000ffffe38437ed8a010000") } diff --git a/cmd/helpers.go b/cmd/helpers.go index 1a8d5614..bbcd3f71 100644 --- a/cmd/helpers.go +++ b/cmd/helpers.go @@ -510,6 +510,8 @@ func InstallRuntime(caller string, projectDir string, projectOptions *ProjectOpt // InstallBridge installs the relevant bridge javascript library func InstallBridge(projectDir string, projectOptions *ProjectOptions) error { bridgeFileData := mewn.String("../runtime/assets/bridge.js") + // Inject the custom serve port + bridgeFileData = strings.ReplaceAll(bridgeFileData, "$SERVEPORT$", projectOptions.ServePort) bridgeFileTarget := filepath.Join(projectDir, projectOptions.FrontEnd.Dir, "node_modules", "@wailsapp", "runtime", "init.js") err := fs.CreateFile(bridgeFileTarget, []byte(bridgeFileData)) return err @@ -561,6 +563,10 @@ func ldFlags(po *ProjectOptions, buildMode string) string { ldflags += "-X github.com/wailsapp/wails.BuildMode=" + buildMode + // Inject port if we are using bridge mode + if buildMode == BuildModeBridge { + ldflags += " -X github.com/wailsapp/wails/lib/renderer/bridge.ServePort=" + po.ServePort + } // If we wish to generate typescript if po.typescriptDefsFilename != "" { cwd, err := os.Getwd() diff --git a/cmd/project.go b/cmd/project.go index 47b472dd..b842c4ab 100644 --- a/cmd/project.go +++ b/cmd/project.go @@ -161,6 +161,7 @@ type ProjectOptions struct { CrossCompile bool Platform string Architecture string + ServePort string } // Defaults sets the default project template diff --git a/cmd/wails/6_serve.go b/cmd/wails/6_serve.go index a6d18ac2..509edada 100644 --- a/cmd/wails/6_serve.go +++ b/cmd/wails/6_serve.go @@ -2,6 +2,7 @@ package main import ( "fmt" + "strconv" "github.com/leaanthony/spinner" "github.com/wailsapp/wails/cmd" @@ -10,6 +11,7 @@ import ( func init() { var forceRebuild = false + var servePort = "34115" var verbose = false buildSpinner := spinner.NewSpinner() buildSpinner.SetSpinSpeed(50) @@ -18,7 +20,8 @@ func init() { initCmd := app.Command("serve", "Run your Wails project in bridge mode"). LongDescription(commandDescription). BoolFlag("verbose", "Verbose output", &verbose). - BoolFlag("f", "Force rebuild of application components", &forceRebuild) + BoolFlag("f", "Force rebuild of application components", &forceRebuild). + StringFlag("p", "Port to serve on", &servePort) initCmd.Action(func() error { @@ -34,7 +37,6 @@ func init() { // Project options projectOptions := &cmd.ProjectOptions{} - projectOptions.Verbose = verbose // Check we are in project directory // Check project.json loads correctly @@ -44,6 +46,16 @@ func init() { return err } + // Set Verbose flag + projectOptions.Verbose = verbose + + // Check port + port, err := strconv.Atoi(servePort) + if err != nil || port <= 0 { + return fmt.Errorf("invalid port value: %s", servePort) + } + projectOptions.ServePort = servePort + // Save project directory projectDir := fs.Cwd() diff --git a/lib/renderer/bridge/bridge.go b/lib/renderer/bridge/bridge.go index 85a9cfd9..6398d926 100644 --- a/lib/renderer/bridge/bridge.go +++ b/lib/renderer/bridge/bridge.go @@ -1,4 +1,4 @@ -package renderer +package bridge import ( "encoding/json" @@ -14,6 +14,10 @@ import ( type messageType int +// ServePort indicates which port to serve the backend on when using +// `wails serve` +var ServePort = "34115" + const ( jsMessage messageType = iota cssMessage @@ -93,7 +97,7 @@ func (h *Bridge) startSession(conn *websocket.Conn) { // Run the app in Bridge mode! func (h *Bridge) Run() error { - h.server = &http.Server{Addr: ":34115"} + h.server = &http.Server{Addr: ":" + ServePort} http.HandleFunc("/bridge", h.wsBridgeHandler) h.log.Info("Bridge mode started.") diff --git a/lib/renderer/bridge/session.go b/lib/renderer/bridge/session.go index 65c0bdef..33d78347 100644 --- a/lib/renderer/bridge/session.go +++ b/lib/renderer/bridge/session.go @@ -1,4 +1,4 @@ -package renderer +package bridge import ( "time" diff --git a/runtime/assets/bridge.js b/runtime/assets/bridge.js index 5c2f73ee..f2a8fdf0 100644 --- a/runtime/assets/bridge.js +++ b/runtime/assets/bridge.js @@ -14,7 +14,7 @@ function init() { window.wailsbridge = { reconnectOverlay: null, reconnectTimer: 300, - wsURL: 'ws://' + window.location.hostname + ':34115/bridge', + wsURL: 'ws://' + window.location.hostname + ':$SERVEPORT$/bridge', connectionState: null, config: {}, websocket: null, @@ -149,38 +149,38 @@ function startBridge() { function handleMessage(message) { // As a bridge we ignore js and css injections switch (message.data[0]) { - // Wails library - inject! - case 'w': - addScript(message.data.slice(1)); + // Wails library - inject! + case 'w': + addScript(message.data.slice(1)); - // Now wails runtime is loaded, wails for the ready event - // and callback to the main app - window.wails.Events.On('wails:loaded', function () { - window.wailsbridge.log('Wails Ready'); - if (window.wailsbridge.callback) { - window.wailsbridge.log('Notifying application'); - window.wailsbridge.callback(window.wails); - } - }); - window.wailsbridge.log('Loaded Wails Runtime'); - break; + // Now wails runtime is loaded, wails for the ready event + // and callback to the main app + window.wails.Events.On('wails:loaded', function () { + window.wailsbridge.log('Wails Ready'); + if (window.wailsbridge.callback) { + window.wailsbridge.log('Notifying application'); + window.wailsbridge.callback(window.wails); + } + }); + window.wailsbridge.log('Loaded Wails Runtime'); + break; // Notifications - case 'n': - addScript(message.data.slice(1), true); - break; + case 'n': + addScript(message.data.slice(1), true); + break; // Binding - case 'b': - var binding = message.data.slice(1); - //log("Binding: " + binding) - window.wails._.NewBinding(binding); - break; + case 'b': + var binding = message.data.slice(1); + //log("Binding: " + binding) + window.wails._.NewBinding(binding); + break; // Call back - case 'c': - var callbackData = message.data.slice(1); - window.wails._.Callback(callbackData); - break; - default: - window.wails.Log.Error('Unknown message type received: ' + message.data[0]); + case 'c': + var callbackData = message.data.slice(1); + window.wails._.Callback(callbackData); + break; + default: + window.wails.Log.Error('Unknown message type received: ' + message.data[0]); } }