mirror of
https://github.com/zhigang1992/create-react-app.git
synced 2026-04-26 06:05:47 +08:00
Add support for yarn and lerna monorepos. (#3741)
* Support for multiple source paths via package.json srcPaths entry. Initial support for yarn workspace. Support lerna workspace, fix for when to use template files. Remove support for specifying srcPaths in package.json. Re-enable transpilation caching. * Clean up, use file matching (similar to original) in webpack configs instead of matching function. * Remove package lock files. * Fix for eject. Note: monorepos won't work after eject. Can be fixed easily with JEST 22.0.?+ which has file pattern matches against realpaths. * Filter tests to run only tests in monorepo components included by the app. (Not sure this is desireable, might be cool to be able to easily run all tests in monorepo from one app.) * Fix conditions for when to use template. * Fix eject. * Remove code that is not needed w/ Jest 22. * Include all cra-comp tests in monorepo instead of trying to include only tests that are dependencies of app. (tests can be easily filtered via jest cli if desired, e.g. 'npm test -- myapp comp1') * Pin find-pkg version. * Hopefully fix jest test file matching on windows by removing first slash. * E2E tests for monorepo. * Run monorepo tests in CI. * Fix and test post-eject build. * Fix e2e test. * Fix test suite names in appveyor. * Include individual package dirs as srcPaths instead of top-level monorepo root. Fixes build/start after eject. * Fix running tests after eject. * Clean up test workspace, add some verifcations. * Cleanup. * Try to fix hang when running test on appveyor. * Don't write babel or lint config to package.json when ejecting. * Incorporate review comments. * Simply monorepo pkg finder * Only include monorepo pkgs if app itself is included in monorepo * Check for specific tests in e2e * Fixes for windows. * Fix for kitchensink mocha tests compiling. * Add lerna monorepo test. * Fix lerna bootstrap on windows. * Incorporate more review comments: * remove support for lerna w/o yarn workspace * add react and react-dom as devDeps to comp1 and comp2 * Add monorepo info to user guide.
This commit is contained in:
committed by
Dan Abramov
parent
5348d6eecf
commit
b43ad04b88
@@ -146,10 +146,6 @@ PORT=3001 \
|
||||
nohup yarn start &>$tmp_server_log &
|
||||
grep -q 'You can now view' <(tail -f $tmp_server_log)
|
||||
|
||||
# Before running Mocha, specify that it should use our preset
|
||||
# TODO: this is very hacky and we should find some other solution
|
||||
echo '{"presets":["react-app"]}' > .babelrc
|
||||
|
||||
# Test "development" environment
|
||||
E2E_URL="http://localhost:3001" \
|
||||
REACT_APP_SHELL_ENV_MESSAGE=fromtheshell \
|
||||
@@ -166,10 +162,6 @@ E2E_FILE=./build/index.html \
|
||||
PUBLIC_URL=http://www.example.org/spa/ \
|
||||
node_modules/.bin/mocha --compilers js:@babel/register --require @babel/polyfill integration/*.test.js
|
||||
|
||||
# Remove the config we just created for Mocha
|
||||
# TODO: this is very hacky and we should find some other solution
|
||||
rm .babelrc
|
||||
|
||||
# ******************************************************************************
|
||||
# Finally, let's check that everything still works after ejecting.
|
||||
# ******************************************************************************
|
||||
|
||||
135
tasks/e2e-monorepos.sh
Executable file
135
tasks/e2e-monorepos.sh
Executable file
@@ -0,0 +1,135 @@
|
||||
#!/bin/bash
|
||||
# Copyright (c) 2015-present, Facebook, Inc.
|
||||
#
|
||||
# This source code is licensed under the MIT license found in the
|
||||
# LICENSE file in the root directory of this source tree.
|
||||
|
||||
# ******************************************************************************
|
||||
# This is an end-to-end test intended to run on CI.
|
||||
# You can also run it locally but it's slow.
|
||||
# ******************************************************************************
|
||||
|
||||
# Start in tasks/ even if run from root directory
|
||||
cd "$(dirname "$0")"
|
||||
|
||||
# App temporary location
|
||||
# http://unix.stackexchange.com/a/84980
|
||||
temp_app_path=`mktemp -d 2>/dev/null || mktemp -d -t 'temp_app_path'`
|
||||
custom_registry_url=http://localhost:4873
|
||||
original_npm_registry_url=`npm get registry`
|
||||
original_yarn_registry_url=`yarn config get registry`
|
||||
|
||||
function cleanup {
|
||||
echo 'Cleaning up.'
|
||||
cd "$root_path"
|
||||
# Uncomment when snapshot testing is enabled by default:
|
||||
# rm ./packages/react-scripts/template/src/__snapshots__/App.test.js.snap
|
||||
rm -rf "$temp_app_path"
|
||||
npm set registry "$original_npm_registry_url"
|
||||
yarn config set registry "$original_yarn_registry_url"
|
||||
}
|
||||
|
||||
# Error messages are redirected to stderr
|
||||
function handle_error {
|
||||
echo "$(basename $0): ERROR! An error was encountered executing line $1." 1>&2;
|
||||
cleanup
|
||||
echo 'Exiting with error.' 1>&2;
|
||||
exit 1
|
||||
}
|
||||
|
||||
function handle_exit {
|
||||
cleanup
|
||||
echo 'Exiting without error.' 1>&2;
|
||||
exit
|
||||
}
|
||||
|
||||
# Check for the existence of one or more files.
|
||||
function exists {
|
||||
for f in $*; do
|
||||
test -e "$f"
|
||||
done
|
||||
}
|
||||
|
||||
# Exit the script with a helpful error message when any error is encountered
|
||||
trap 'set +x; handle_error $LINENO $BASH_COMMAND' ERR
|
||||
|
||||
# Cleanup before exit on any termination signal
|
||||
trap 'set +x; handle_exit' SIGQUIT SIGTERM SIGINT SIGKILL SIGHUP
|
||||
|
||||
# Echo every command being executed
|
||||
set -x
|
||||
|
||||
# Go to root
|
||||
cd ..
|
||||
root_path=$PWD
|
||||
|
||||
if hash npm 2>/dev/null
|
||||
then
|
||||
npm i -g npm@latest
|
||||
npm cache clean || npm cache verify
|
||||
fi
|
||||
|
||||
# Bootstrap create-react-app monorepo
|
||||
yarn
|
||||
|
||||
# Start local registry
|
||||
tmp_registry_log=`mktemp`
|
||||
nohup npx verdaccio@2.7.2 &>$tmp_registry_log &
|
||||
# Wait for `verdaccio` to boot
|
||||
grep -q 'http address' <(tail -f $tmp_registry_log)
|
||||
|
||||
# Set registry to local registry
|
||||
npm set registry "$custom_registry_url"
|
||||
yarn config set registry "$custom_registry_url"
|
||||
|
||||
# Login so we can publish packages
|
||||
npx npm-cli-login@0.0.10 -u user -p password -e user@example.com -r "$custom_registry_url" --quotes
|
||||
|
||||
git clean -df
|
||||
./tasks/publish.sh --yes --force-publish=* --skip-git --cd-version=prerelease --exact --npm-tag=latest
|
||||
|
||||
function verifyTest {
|
||||
CI=true yarn test --watch=no --json --outputFile testoutput.json || return 1
|
||||
cat testoutput.json
|
||||
# on windows, output contains double backslashes for path separator
|
||||
grep -E -q "src([\\]{1,2}|/)App.test.js" testoutput.json || return 1
|
||||
grep -E -q "comp1([\\]{1,2}|/)index.test.js" testoutput.json || return 1
|
||||
grep -E -q "comp2([\\]{1,2}|/)index.test.js" testoutput.json || return 1
|
||||
}
|
||||
|
||||
function verifyBuild {
|
||||
yarn build || return 1
|
||||
grep -F -R --exclude=*.map "YarnWS-CraApp" build/ -q || return 1
|
||||
}
|
||||
|
||||
# ******************************************************************************
|
||||
# Test yarn workspace monorepo
|
||||
# ******************************************************************************
|
||||
# Set up yarn workspace monorepo
|
||||
pushd "$temp_app_path"
|
||||
cp -r "$root_path/packages/react-scripts/fixtures/monorepos/yarn-ws" .
|
||||
cd "yarn-ws"
|
||||
cp -r "$root_path/packages/react-scripts/fixtures/monorepos/packages" .
|
||||
yarn
|
||||
|
||||
# Test cra-app1
|
||||
cd packages/cra-app1
|
||||
verifyBuild
|
||||
yarn start --smoke-test
|
||||
verifyTest
|
||||
|
||||
# Test eject
|
||||
echo yes | npm run eject
|
||||
verifyBuild
|
||||
yarn start --smoke-test
|
||||
verifyTest
|
||||
|
||||
# ******************************************************************************
|
||||
# Test create-react-app inside workspace
|
||||
# ******************************************************************************
|
||||
# npx create-react-app --internal-testing-template="$root_path"/packages/react-scripts/fixtures/yarn-ws/ws/cra-app1 cra-app2
|
||||
# -- above needs https://github.com/facebookincubator/create-react-app/pull/3435 to user create-react-app
|
||||
popd
|
||||
|
||||
# Cleanup
|
||||
cleanup
|
||||
@@ -49,7 +49,7 @@ while [ "$1" != "" ]; do
|
||||
shift
|
||||
done
|
||||
|
||||
test_command="./tasks/e2e-simple.sh && ./tasks/e2e-kitchensink.sh && ./tasks/e2e-installs.sh"
|
||||
test_command="./tasks/e2e-simple.sh && ./tasks/e2e-kitchensink.sh && ./tasks/e2e-installs.sh && ./tasks/e2e-monorepos.sh"
|
||||
case ${test_suite} in
|
||||
"all")
|
||||
;;
|
||||
@@ -62,6 +62,9 @@ case ${test_suite} in
|
||||
"installs")
|
||||
test_command="./tasks/e2e-installs.sh"
|
||||
;;
|
||||
"monorepos")
|
||||
test_command="./tasks/e2e-monorepos.sh"
|
||||
;;
|
||||
*)
|
||||
;;
|
||||
esac
|
||||
|
||||
Reference in New Issue
Block a user