mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-08-15 19:26:42 +08:00
feat(webpack): read nativescript.config.ts main if set before fallback to package.json (#9769)
implements #9658 BREAKING CHANGES: Possibly breaking if a project has a main field set in the nativescript.config.ts - since after this lands, this value will be used instead of package.json main. The impact is likely very small, the steps to migrate: (Option A) remove main from nativescript.config.ts if set (Option B) update main to the correct path in nativescript.config.ts if set incorrectly
This commit is contained in:
@ -147,7 +147,7 @@ export interface NativeScriptConfig {
|
|||||||
*/
|
*/
|
||||||
id?: string;
|
id?: string;
|
||||||
/**
|
/**
|
||||||
* App's main entry file (currently ignored - set it in package.json main field)
|
* App's main entry file - this setting overrides the value set in package.json
|
||||||
*/
|
*/
|
||||||
main?: string;
|
main?: string;
|
||||||
/**
|
/**
|
||||||
|
49
packages/webpack5/__tests__/helpers/platform.spec.ts
Normal file
49
packages/webpack5/__tests__/helpers/platform.spec.ts
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
import { env } from '../../src/';
|
||||||
|
import { addPlatform, getEntryPath } from '../../src/helpers/platform';
|
||||||
|
|
||||||
|
import { getValue } from '../../src/helpers/config';
|
||||||
|
|
||||||
|
describe('getEntryPath', () => {
|
||||||
|
it('uses platform getEntryPath if the platform specifies it', () => {
|
||||||
|
env.platform = 'testPlatform';
|
||||||
|
addPlatform('testPlatform', {
|
||||||
|
getEntryPath() {
|
||||||
|
return 'custom-entry-path';
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const res = getEntryPath();
|
||||||
|
expect(res).toEqual('custom-entry-path');
|
||||||
|
|
||||||
|
// cleanup env
|
||||||
|
delete env.platform;
|
||||||
|
});
|
||||||
|
|
||||||
|
it('uses main from nativescript.config.ts if set', () => {
|
||||||
|
env.ios = true;
|
||||||
|
|
||||||
|
// mock getValue
|
||||||
|
const getValueMock = getValue as jest.Mock;
|
||||||
|
const getValueMockImpl = getValueMock.getMockImplementation();
|
||||||
|
|
||||||
|
getValueMock.mockImplementation((key) => {
|
||||||
|
if (key === 'main') {
|
||||||
|
return 'main-from-config';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const res = getEntryPath();
|
||||||
|
expect(res).toEqual('__jest__/main-from-config');
|
||||||
|
|
||||||
|
// reset mock implementation
|
||||||
|
getValueMock.mockImplementation(getValueMockImpl);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('uses main from package.json', () => {
|
||||||
|
env.ios = true;
|
||||||
|
|
||||||
|
const res = getEntryPath();
|
||||||
|
// set in jest.setup.ts mock for package.json...
|
||||||
|
expect(res).toEqual('__jest__/src/app.js');
|
||||||
|
});
|
||||||
|
});
|
@ -13,10 +13,10 @@ jest.mock('cosmiconfig', () => ({
|
|||||||
},
|
},
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
const getValueMock = jest.fn();
|
||||||
|
getValueMock.mockImplementation((key, defaultValue) => defaultValue);
|
||||||
jest.mock('../src/helpers/config.ts', () => ({
|
jest.mock('../src/helpers/config.ts', () => ({
|
||||||
getValue(key, defaultValue) {
|
getValue: getValueMock,
|
||||||
return defaultValue;
|
|
||||||
},
|
|
||||||
}));
|
}));
|
||||||
|
|
||||||
jest.mock('os', () => {
|
jest.mock('os', () => {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
|
import { warnOnce } from './log';
|
||||||
import { env } from '../index';
|
import { env } from '../index';
|
||||||
import { error, warnOnce } from './log';
|
|
||||||
|
|
||||||
function getCLILib() {
|
function getCLILib() {
|
||||||
if (!env.nativescriptLibPath) {
|
if (!env.nativescriptLibPath) {
|
||||||
@ -28,7 +28,9 @@ export function getValue<T = any>(key: string, defaultValue?: any): T {
|
|||||||
return defaultValue;
|
return defaultValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (lib.projectConfigService as {
|
return (
|
||||||
getValue(key: string, defaultValue?: any): T;
|
lib.projectConfigService as {
|
||||||
}).getValue(key, defaultValue);
|
getValue(key: string, defaultValue?: any): T;
|
||||||
|
}
|
||||||
|
).getValue(key, defaultValue);
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@ import { dirname, resolve } from 'path';
|
|||||||
|
|
||||||
import { getPackageJson, getProjectRootPath } from './project';
|
import { getPackageJson, getProjectRootPath } from './project';
|
||||||
import { error, info, warnOnce } from './log';
|
import { error, info, warnOnce } from './log';
|
||||||
|
import { getValue } from './config';
|
||||||
import { env } from '../';
|
import { env } from '../';
|
||||||
|
|
||||||
import AndroidPlatform from '../platforms/android';
|
import AndroidPlatform from '../platforms/android';
|
||||||
@ -99,6 +100,13 @@ export function getEntryPath() {
|
|||||||
return platform.getEntryPath();
|
return platform.getEntryPath();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// try main from nativescript.config.ts
|
||||||
|
const main = getValue('main');
|
||||||
|
|
||||||
|
if (main) {
|
||||||
|
return resolve(getProjectRootPath(), main);
|
||||||
|
}
|
||||||
|
|
||||||
// fallback to main field in package.json
|
// fallback to main field in package.json
|
||||||
const packageJson = getPackageJson();
|
const packageJson = getPackageJson();
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user