我正在尝试为电子应用程序创建 Windows 安装程序。
首先,应用程序使用电子打包器进行打包。
exec(`npx electron-packager ./ "My App Name" --platform=win32 --out=${packagedLocation}`);
Run Code Online (Sandbox Code Playgroud)
然后使用 electro-winstaller 创建应用程序的安装程序。
try {
await electronInstaller.createWindowsInstaller({
appDirectory: packagedLocation,
outputDirectory: installerLocation,
authors: 'Author',
exe: 'myapp.exe'
});
} catch (e) {
console.log(`Failure: ${e.message}`);
}
Run Code Online (Sandbox Code Playgroud)
当运行创建安装程序的代码时,exe 和 msi 安装程序都未正确创建。创建的Setup.exe只有大约200 KB。尝试运行 exe 会生成一个对话框,其中显示:This is a dummy update.exe. If you are seeing this, your build did not correctly replace the IDR_UPDATE_ZIP resource. Command Line: '--install .'
。Squirrel 或构建脚本的日志中没有给出任何错误。
通过测试,我发现如果我打包的应用程序的大小太大,就会发生这种情况。我的应用程序包含大约 3 GB 的资源。我需要将这些资源作为安装程序的一部分包含在内,而不是根据需要下载,因为该应用程序旨在无需访问互联网即可运行。这些资源的大小已经优化,我无法从我的应用程序中删除任何资源。
出于测试目的,如果我随机删除其中一些资源,直到打包应用程序的大小小于 1 GB,则 Electron-winstaller 将正确创建安装程序,不会出现任何问题。似乎不是任何特定资源导致了该错误。
有什么方法可以在不阻止创建安装程序的情况下将这些资源包含在我的应用程序中?
更新 …
如果在我的 React 应用程序中登录成功,我将尝试将用户重定向到新页面。重定向是从不是组件的 auth 服务调用的。为了访问组件外部的历史对象,我按照React Router FAQ中的示例进行操作。但是,当我致电 时history.push('/pageafterlogin')
,页面不会更改,并且我仍保留在登录页面上(根据我的Switch
预期最终会出现在该页404
面上)。地址栏中的 URL 确实更改为/pageafterlogin
登录页面,但页面未更改。控制台中没有出现任何错误,也没有任何其他信息表明我的代码不起作用。
我怎样才能history.push()
更改用户所在的页面?
// /src/history.js
import { createBrowserHistory } from 'history';
export default createBrowserHistory();
// /src/App.js
...
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
import history from './history';
function App() {
return (
<Router history={history}>
<Switch>
<Route path="/" exact component={HomePage} />
<Route path="/login" exact render={() => <FormWrapper><LoginForm /></FormWrapper>} />
<Route render={() => <h1>404: not found</h1>} />
</Switch> …
Run Code Online (Sandbox Code Playgroud) 我正在节点中编写一个应用程序14.9.0
。我通过添加"type": "module"
到我的package.json
. 我正在尝试为我的项目导入模块。我想避免使用相对导入(因为../../
可读性很高),而是想使用绝对导入,就好像每个模块都是从index.js
项目根目录中的文件导入一样。
根据我收集的有关节点如何发现模块的信息,.
在导入路径前面省略 应该使节点默认从项目的根目录查找模块。然而,它反而尝试从我的硬盘驱动器的根目录查找。
...
import User from '/models/user.model';
...
Error [ERR_MODULE_NOT_FOUND]: Cannot find module 'C:\models\user.model' imported from C:\Users\User\Documents\My App\my-app\index.js
Run Code Online (Sandbox Code Playgroud)
我没有使用 typescript、webpack、babel 或任何其他转译器。没有它们是否有可能获得绝对进口?
我正在电子中编写一个应用程序,如果用户打开了未保存的文件,我想在保存之前提示用户。我在网上找到了这个示例代码:
window.onbeforeunload = (e) => {
var answer = confirm('Do you really want to close the application?');
e.returnValue = answer; // this will *prevent* the closing no matter what value is passed
if(answer) { mainWindow.destroy(); } // this will close the app
};
Run Code Online (Sandbox Code Playgroud)
如果在对话框出现后几秒钟内按下“是”、“取消”或“X”按钮,则此代码会奇怪地工作,但如果让对话框在屏幕上停留一会儿,然后单击按钮,则无论按下什么按钮,应用程序都会关闭。
该代码位于我的主脚本文件中,由index.html调用