this is just for the repo, and not the workspace Co-authored-by: Rares Matei <matei.rar@gmail.com>
140 lines
4.2 KiB
TypeScript
140 lines
4.2 KiB
TypeScript
import {
|
|
checkFilesDoNotExist,
|
|
ensureProject,
|
|
forEachCli,
|
|
readJson,
|
|
runCLI,
|
|
uniq,
|
|
updateFile,
|
|
} from './utils';
|
|
|
|
forEachCli('nx', (cli) => {
|
|
describe('Build React libraries and apps', () => {
|
|
/**
|
|
* Graph:
|
|
*
|
|
* childLib
|
|
* /
|
|
* app => parentLib =>
|
|
* \
|
|
* childLib2
|
|
*
|
|
*/
|
|
let app: string;
|
|
let parentLib: string;
|
|
let childLib: string;
|
|
let childLib2: string;
|
|
|
|
beforeEach(() => {
|
|
app = uniq('app');
|
|
parentLib = uniq('parentlib');
|
|
childLib = uniq('childlib');
|
|
childLib2 = uniq('childlib2');
|
|
|
|
ensureProject();
|
|
|
|
runCLI(`generate @nrwl/react:app ${app}`);
|
|
|
|
runCLI(
|
|
`generate @nrwl/react:library ${parentLib} --buildable --no-interactive`
|
|
);
|
|
runCLI(
|
|
`generate @nrwl/react:library ${childLib} --buildable --no-interactive`
|
|
);
|
|
runCLI(
|
|
`generate @nrwl/react:library ${childLib2} --buildable --no-interactive`
|
|
);
|
|
|
|
// create dependencies by importing
|
|
const createDep = (parent, children: string[]) => {
|
|
updateFile(
|
|
`libs/${parent}/src/lib/${parent}.tsx`,
|
|
`
|
|
${children.map((entry) => `import '@proj/${entry}';`).join('\n')}
|
|
|
|
`
|
|
);
|
|
};
|
|
|
|
createDep(parentLib, [childLib, childLib2]);
|
|
|
|
updateFile(
|
|
`apps/${app}/src/main.tsx`,
|
|
`
|
|
import "@proj/${parentLib}";
|
|
`
|
|
);
|
|
|
|
// we are setting paths to {} to make sure built libs are read from dist
|
|
updateFile('tsconfig.json', (c) => {
|
|
const json = JSON.parse(c);
|
|
json.compilerOptions.paths = {};
|
|
return JSON.stringify(json, null, 2);
|
|
});
|
|
});
|
|
|
|
it('should throw an error if the dependent library has not been built before building the parent lib', () => {
|
|
expect.assertions(2);
|
|
|
|
try {
|
|
runCLI(`build ${parentLib}`);
|
|
} catch (e) {
|
|
expect(e.stderr.toString()).toContain(
|
|
`Some of the project ${parentLib}'s dependencies have not been built yet. Please build these libraries before:`
|
|
);
|
|
expect(e.stderr.toString()).toContain(`${childLib}`);
|
|
}
|
|
});
|
|
|
|
it('should build the library when it does not have any deps', () => {
|
|
const output = runCLI(`build ${childLib}`);
|
|
expect(output).toContain(`${childLib}.esm.js`);
|
|
expect(output).toContain(`Bundle complete`);
|
|
});
|
|
|
|
it('should properly add references to any dependency into the parent package.json', () => {
|
|
const childLibOutput = runCLI(`build ${childLib}`);
|
|
const childLib2Output = runCLI(`build ${childLib2}`);
|
|
const parentLibOutput = runCLI(`build ${parentLib}`);
|
|
|
|
expect(childLibOutput).toContain(`${childLib}.esm.js`);
|
|
expect(childLibOutput).toContain(`${childLib}.umd.js`);
|
|
expect(childLibOutput).toContain(`Bundle complete`);
|
|
|
|
expect(childLib2Output).toContain(`${childLib2}.esm.js`);
|
|
expect(childLib2Output).toContain(`${childLib2}.umd.js`);
|
|
expect(childLib2Output).toContain(`Bundle complete`);
|
|
|
|
expect(parentLibOutput).toContain(`${parentLib}.esm.js`);
|
|
expect(parentLibOutput).toContain(`${parentLib}.umd.js`);
|
|
expect(parentLibOutput).toContain(`Bundle complete`);
|
|
|
|
const jsonFile = readJson(`dist/libs/${parentLib}/package.json`);
|
|
expect(jsonFile.dependencies).toEqual({
|
|
[`@proj/${childLib}`]: '0.0.1',
|
|
[`@proj/${childLib2}`]: '0.0.1',
|
|
});
|
|
});
|
|
|
|
it('should build an app composed out of buildable libs', () => {
|
|
const buildWithDeps = runCLI(`build ${app} --with-deps`);
|
|
expect(buildWithDeps).toContain(`Running target "build" succeeded`);
|
|
checkFilesDoNotExist(`apps/${app}/tsconfig/tsconfig.nx-tmp`);
|
|
|
|
// we remove all path mappings from the root tsconfig, so when trying to build
|
|
// libs from source, the builder will throw
|
|
const failedBuild = runCLI(
|
|
`build ${app} --with-deps --buildLibsFromSource`,
|
|
{ silenceError: true }
|
|
);
|
|
expect(failedBuild).toContain(`Can't resolve`);
|
|
}, 1000000);
|
|
});
|
|
});
|
|
|
|
forEachCli('angular', () => {
|
|
describe('Build Angular library', () => {
|
|
it('should work', async () => {}, 1000000);
|
|
});
|
|
});
|