fix: app.getAppPath() returning default-app path for files or directories without package.json (#18763)

This commit is contained in:
Milan Burda 2019-06-19 23:34:22 +02:00 коммит произвёл Alexey Kuzmin
Родитель 7201845894
Коммит 79f0c444fd
4 изменённых файлов: 40 добавлений и 2 удалений

Просмотреть файл

@ -85,6 +85,7 @@ function loadApplicationPackage (packagePath: string) {
// Override app name and version. // Override app name and version.
packagePath = path.resolve(packagePath) packagePath = path.resolve(packagePath)
const packageJsonPath = path.join(packagePath, 'package.json') const packageJsonPath = path.join(packagePath, 'package.json')
let appPath
if (fs.existsSync(packageJsonPath)) { if (fs.existsSync(packageJsonPath)) {
let packageJson let packageJson
try { try {
@ -102,11 +103,12 @@ function loadApplicationPackage (packagePath: string) {
} else if (packageJson.name) { } else if (packageJson.name) {
app.name = packageJson.name app.name = packageJson.name
} }
app._setDefaultAppPaths(packagePath) appPath = packagePath
} }
try { try {
Module._resolveFilename(packagePath, module, true) const filePath = Module._resolveFilename(packagePath, module, true)
app._setDefaultAppPaths(appPath || path.dirname(filePath))
} catch (e) { } catch (e) {
showErrorMessage(`Unable to find Electron app at ${packagePath}\n\n${e.message}`) showErrorMessage(`Unable to find Electron app at ${packagePath}\n\n${e.message}`)
return return

Просмотреть файл

@ -645,6 +645,28 @@ describe('app module', () => {
}) })
}) })
describe('getAppPath', () => {
it('works for directories with package.json', async () => {
const { appPath } = await runTestApp('app-path')
expect(appPath).to.equal(path.resolve(fixturesPath, 'api/app-path'))
})
it('works for directories with index.js', async () => {
const { appPath } = await runTestApp('app-path/lib')
expect(appPath).to.equal(path.resolve(fixturesPath, 'api/app-path/lib'))
})
it('works for files without extension', async () => {
const { appPath } = await runTestApp('app-path/lib/index')
expect(appPath).to.equal(path.resolve(fixturesPath, 'api/app-path/lib'))
})
it('works for files', async () => {
const { appPath } = await runTestApp('app-path/lib/index.js')
expect(appPath).to.equal(path.resolve(fixturesPath, 'api/app-path/lib'))
})
})
describe('getPath(name)', () => { describe('getPath(name)', () => {
it('returns paths that exist', () => { it('returns paths that exist', () => {
const paths = [ const paths = [

10
spec/fixtures/api/app-path/lib/index.js поставляемый Normal file
Просмотреть файл

@ -0,0 +1,10 @@
const { app } = require('electron')
const payload = {
appPath: app.getAppPath()
}
process.stdout.write(JSON.stringify(payload))
process.stdout.end()
process.exit()

4
spec/fixtures/api/app-path/package.json поставляемый Normal file
Просмотреть файл

@ -0,0 +1,4 @@
{
"name": "app-path",
"main": "lib/index.js"
}