diff --git a/gulpfile.js b/gulpfile.js index dd6ba06c6..9c7988070 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -29,12 +29,6 @@ const paths = { ...IGNORED_PACKAGES, ], packageOther: ['packages/*/*/src/**/dev-prelude.js'], - packageJson: [ - 'packages/core/parcel/package.json', - 'packages/utils/create-react-app/package.json', - 'packages/dev/query/package.json', - 'packages/dev/bundle-stats-cli/package.json', - ], packages: 'packages/', }; @@ -65,16 +59,7 @@ exports.clean = function clean(cb) { ); }; -exports.default = exports.build = gulp.series( - gulp.parallel(buildBabel, copyOthers), - // Babel reads from package.json so update these after babel has run - paths.packageJson.map( - packageJsonPath => - function updatePackageJson() { - return _updatePackageJson(packageJsonPath); - }, - ), -); +exports.default = exports.build = gulp.parallel(buildBabel, copyOthers); function buildBabel() { return gulp @@ -91,28 +76,6 @@ function copyOthers() { .pipe(gulp.dest(paths.packages)); } -function _updatePackageJson(file) { - return gulp - .src(file) - .pipe( - new TapStream(vinyl => { - let json = JSON.parse(vinyl.contents); - // Replace all references to `src` in package.json bin entries - // `lib` equivalents. - if (typeof json.bin === 'object' && json.bin != null) { - for (let [binName, binPath] of Object.entries(json.bin)) { - json.bin[binName] = binPath.replace('src', 'lib'); - } - } else if (typeof json.bin === 'string') { - json.bin = json.bin.replace('src', 'lib'); - } - - vinyl.contents = Buffer.from(JSON.stringify(json, null, 2)); - }), - ) - .pipe(gulp.dest(path.dirname(file))); -} - function renameStream(fn) { return new TapStream(vinyl => { let relative = path.relative(vinyl.base, vinyl.path); diff --git a/package.json b/package.json index 998cfa38c..2311f65a1 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ ], "scripts": { "build": "yarn build-bundles && cross-env NODE_ENV=production PARCEL_BUILD_ENV=production gulp", - "build-bundles": "rimraf --glob packages/*/*/lib && cross-env NODE_ENV=production PARCEL_BUILD_ENV=production PARCEL_SELF_BUILD=true parcel build packages/core/{fs,codeframe,package-manager,utils} packages/reporters/{cli,dev-server} packages/utils/{parcel-lsp,parcel-lsp-protocol}", + "build-bundles": "rimraf --glob packages/*/*/lib && lerna run dev:prepare && cross-env NODE_ENV=production PARCEL_BUILD_ENV=production PARCEL_SELF_BUILD=true parcel build packages/core/{fs,codeframe,package-manager,utils} packages/reporters/{cli,dev-server} packages/utils/{parcel-lsp,parcel-lsp-protocol}", "build-ts": "lerna run build-ts && lerna run check-ts", "build-native": "node scripts/build-native.js", "build-native-release": "node scripts/build-native.js --release", diff --git a/packages/core/parcel/.npmignore b/packages/core/parcel/.npmignore new file mode 100644 index 000000000..e0da44dd4 --- /dev/null +++ b/packages/core/parcel/.npmignore @@ -0,0 +1 @@ +/bin/dev-bin.js diff --git a/packages/core/parcel/bin/dev-bin.js b/packages/core/parcel/bin/dev-bin.js new file mode 100644 index 000000000..05eef79da --- /dev/null +++ b/packages/core/parcel/bin/dev-bin.js @@ -0,0 +1,8 @@ +/** + * DEV BIN - DO NOT PUBLISH + * + * This file is copied into /lib/ by `yarn run dev:prepare` + * + * When babel build runs it is overwritten by another asset. + */ +require('../src/bin'); diff --git a/packages/core/parcel/bin/parcel.js b/packages/core/parcel/bin/parcel.js new file mode 100755 index 000000000..aacb05696 --- /dev/null +++ b/packages/core/parcel/bin/parcel.js @@ -0,0 +1,2 @@ +#!/usr/bin/env node +require('../lib/bin'); diff --git a/packages/core/parcel/ensure-no-dev-lib.sh b/packages/core/parcel/ensure-no-dev-lib.sh new file mode 120000 index 000000000..4fcc6cbb5 --- /dev/null +++ b/packages/core/parcel/ensure-no-dev-lib.sh @@ -0,0 +1 @@ +../../../scripts/ensure-no-dev-lib.sh \ No newline at end of file diff --git a/packages/core/parcel/package.json b/packages/core/parcel/package.json index 016b2f0f4..7120164b7 100644 --- a/packages/core/parcel/package.json +++ b/packages/core/parcel/package.json @@ -14,9 +14,13 @@ "type": "git", "url": "https://github.com/parcel-bundler/parcel.git" }, - "bin": "src/bin.js", + "bin": "bin/parcel.js", "main": "lib/bin.js", "source": "src/bin.js", + "scripts": { + "prepack": "./ensure-no-dev-lib.sh", + "dev:prepare": "rimraf ./lib/ && mkdir -p lib && cp ./bin/dev-bin.js ./lib/bin.js" + }, "engines": { "node": ">= 16.0.0" }, @@ -39,6 +43,7 @@ }, "devDependencies": { "@babel/core": "^7.22.11", - "@parcel/babel-register": "2.12.0" + "@parcel/babel-register": "2.12.0", + "rimraf": "^5.0.5" } } diff --git a/packages/dev/bundle-stats-cli/.npmignore b/packages/dev/bundle-stats-cli/.npmignore new file mode 100644 index 000000000..e0da44dd4 --- /dev/null +++ b/packages/dev/bundle-stats-cli/.npmignore @@ -0,0 +1 @@ +/bin/dev-bin.js diff --git a/packages/dev/bundle-stats-cli/bin/bundle-stats.js b/packages/dev/bundle-stats-cli/bin/bundle-stats.js new file mode 100755 index 000000000..aacb05696 --- /dev/null +++ b/packages/dev/bundle-stats-cli/bin/bundle-stats.js @@ -0,0 +1,2 @@ +#!/usr/bin/env node +require('../lib/bin'); diff --git a/packages/dev/bundle-stats-cli/bin/dev-bin.js b/packages/dev/bundle-stats-cli/bin/dev-bin.js new file mode 100644 index 000000000..05eef79da --- /dev/null +++ b/packages/dev/bundle-stats-cli/bin/dev-bin.js @@ -0,0 +1,8 @@ +/** + * DEV BIN - DO NOT PUBLISH + * + * This file is copied into /lib/ by `yarn run dev:prepare` + * + * When babel build runs it is overwritten by another asset. + */ +require('../src/bin'); diff --git a/packages/dev/bundle-stats-cli/ensure-no-dev-lib.sh b/packages/dev/bundle-stats-cli/ensure-no-dev-lib.sh new file mode 120000 index 000000000..4fcc6cbb5 --- /dev/null +++ b/packages/dev/bundle-stats-cli/ensure-no-dev-lib.sh @@ -0,0 +1 @@ +../../../scripts/ensure-no-dev-lib.sh \ No newline at end of file diff --git a/packages/dev/bundle-stats-cli/package.json b/packages/dev/bundle-stats-cli/package.json index 2dfdf67b9..748276fbb 100644 --- a/packages/dev/bundle-stats-cli/package.json +++ b/packages/dev/bundle-stats-cli/package.json @@ -16,7 +16,11 @@ "main": "lib/cli.js", "source": "src/cli.js", "bin": { - "parcel-bundle-stats": "src/bin.js" + "parcel-bundle-stats": "bin/bundle-stats.js" + }, + "scripts": { + "prepack": "./ensure-no-dev-lib.sh", + "dev:prepare": "rimraf ./lib/ && mkdir -p lib && cp ./bin/dev-bin.js ./lib/bin.js" }, "engines": { "node": ">= 16.0.0", @@ -31,6 +35,7 @@ }, "devDependencies": { "@parcel/babel-register": "2.12.0", - "@parcel/types": "2.12.0" + "@parcel/types": "2.12.0", + "rimraf": "^5.0.5" } } diff --git a/packages/dev/query/.npmignore b/packages/dev/query/.npmignore new file mode 100644 index 000000000..e0da44dd4 --- /dev/null +++ b/packages/dev/query/.npmignore @@ -0,0 +1 @@ +/bin/dev-bin.js diff --git a/packages/dev/query/bin/dev-bin.js b/packages/dev/query/bin/dev-bin.js new file mode 100644 index 000000000..05eef79da --- /dev/null +++ b/packages/dev/query/bin/dev-bin.js @@ -0,0 +1,8 @@ +/** + * DEV BIN - DO NOT PUBLISH + * + * This file is copied into /lib/ by `yarn run dev:prepare` + * + * When babel build runs it is overwritten by another asset. + */ +require('../src/bin'); diff --git a/packages/dev/query/bin/parcel-query.js b/packages/dev/query/bin/parcel-query.js new file mode 100755 index 000000000..aacb05696 --- /dev/null +++ b/packages/dev/query/bin/parcel-query.js @@ -0,0 +1,2 @@ +#!/usr/bin/env node +require('../lib/bin'); diff --git a/packages/dev/query/ensure-no-dev-lib.sh b/packages/dev/query/ensure-no-dev-lib.sh new file mode 120000 index 000000000..4fcc6cbb5 --- /dev/null +++ b/packages/dev/query/ensure-no-dev-lib.sh @@ -0,0 +1 @@ +../../../scripts/ensure-no-dev-lib.sh \ No newline at end of file diff --git a/packages/dev/query/package.json b/packages/dev/query/package.json index 9e34c0d18..a2d4e3486 100644 --- a/packages/dev/query/package.json +++ b/packages/dev/query/package.json @@ -9,12 +9,16 @@ "type": "opencollective", "url": "https://opencollective.com/parcel" }, + "scripts": { + "prepack": "./ensure-no-dev-lib.sh", + "dev:prepare": "rimraf ./lib/ && mkdir -p lib && cp ./bin/dev-bin.js ./lib/bin.js" + }, "repository": { "type": "git", "url": "https://github.com/parcel-bundler/parcel.git" }, "bin": { - "parcel-query": "src/bin.js" + "parcel-query": "bin/parcel-query.js" }, "main": "src/index.js", "dependencies": { @@ -27,6 +31,7 @@ }, "devDependencies": { "@babel/core": "^7.22.11", - "@parcel/babel-register": "2.12.0" + "@parcel/babel-register": "2.12.0", + "rimraf": "^5.0.5" } } diff --git a/packages/utils/create-react-app/.npmignore b/packages/utils/create-react-app/.npmignore new file mode 100644 index 000000000..e0da44dd4 --- /dev/null +++ b/packages/utils/create-react-app/.npmignore @@ -0,0 +1 @@ +/bin/dev-bin.js diff --git a/packages/utils/create-react-app/bin/dev-bin.js b/packages/utils/create-react-app/bin/dev-bin.js new file mode 100644 index 000000000..05eef79da --- /dev/null +++ b/packages/utils/create-react-app/bin/dev-bin.js @@ -0,0 +1,8 @@ +/** + * DEV BIN - DO NOT PUBLISH + * + * This file is copied into /lib/ by `yarn run dev:prepare` + * + * When babel build runs it is overwritten by another asset. + */ +require('../src/bin'); diff --git a/packages/utils/create-react-app/ensure-no-dev-lib.sh b/packages/utils/create-react-app/ensure-no-dev-lib.sh new file mode 120000 index 000000000..4fcc6cbb5 --- /dev/null +++ b/packages/utils/create-react-app/ensure-no-dev-lib.sh @@ -0,0 +1 @@ +../../../scripts/ensure-no-dev-lib.sh \ No newline at end of file diff --git a/packages/utils/create-react-app/package.json b/packages/utils/create-react-app/package.json index ea29ce568..bbad2afd9 100644 --- a/packages/utils/create-react-app/package.json +++ b/packages/utils/create-react-app/package.json @@ -2,7 +2,7 @@ "name": "@parcel/create-react-app", "version": "2.12.0", "bin": { - "parcel-create-react-app": "src/bin.js" + "parcel-create-react-app": "lib/bin.js" }, "main": "src/bin.js", "repository": { @@ -13,8 +13,13 @@ "source": "src/bin.js", "files": [ "templates", - "lib" + "lib", + "bin" ], + "scripts": { + "prepack": "./ensure-no-dev-lib.sh", + "dev:prepare": "rimraf ./lib/ && mkdir -p lib && cp ./bin/dev-bin.js ./lib/bin.js" + }, "license": "MIT", "publishConfig": { "access": "public" @@ -32,6 +37,7 @@ }, "devDependencies": { "@babel/core": "^7.22.11", - "@parcel/babel-register": "2.12.0" + "@parcel/babel-register": "2.12.0", + "rimraf": "^5.0.5" } } diff --git a/scripts/ensure-no-dev-lib.sh b/scripts/ensure-no-dev-lib.sh new file mode 100755 index 000000000..2074ac9ba --- /dev/null +++ b/scripts/ensure-no-dev-lib.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +set -e + +if grep -q "DEV BIN - DO NOT PUBLISH" lib/bin.js +then + echo "found dev files in lib" + exit 1 +else + echo "no dev files in lib" + exit 0 +fi