Error: Source and destination must not be the same. When using useServerlessTraceTarget
See original GitHub issueThis is most likely some misconfiguration on my part but I can’t figure out what exactly is wrong. I reported this issue with a comment on #405 but I believe it’s more appropriate to create a bug report. Let me know if this isn’t the right way 😃
Describe the bug
When running serverless
with the Inputs useServerlessTraceTarget: true
the build fails with the following output:
$->serverless --debug
DEBUG ─ Resolving the template's static variables.
DEBUG ─ Collecting components from the template.
DEBUG ─ Downloading any NPM components found in the template.
DEBUG ─ Analyzing the template's components dependencies.
DEBUG ─ Creating the template's components graph.
DEBUG ─ Syncing template state.
DEBUG ─ Executing the template's components graph.
error:
Error: Source and destination must not be the same.
at .serverless/components/registry/npm/serverless-next.js@1.15.0-alpha.0/node_modules/@sls-next/lambda-at-edge/node_modules/fs-extra/lib/util/stat.js:39:17
at cb (util.js:196:39)
at processTicksAndRejections (internal/process/task_queues.js:81:21)
100s › webApp › Error: Source and destination must not be the same.
To Reproduce With the following configuration:
package.json
:
"dependencies": {
"aws-amplify": "^3.0.18",
"axios": "^0.19.2",
"axios-retry": "^3.1.8",
"babel-loader": "^8.1.0",
"babel-plugin-styled-components": "^1.10.7",
"bignumber.js": "^9.0.0",
"bootstrap": "^4.5.0",
"dotenv": "^8.2.0",
"dotenv-webpack": "^1.8.0",
"firebase": "^7.15.3",
"humps": "^2.0.1",
"immer": "^6.0.8",
"install": "^0.13.0",
"jquery": "^3.5.1",
"jwt-decode": "^2.2.0",
"localforage": "^1.7.4",
"lodash": "^4.17.15",
"moment": "^2.27.0",
"next": "^9.4.4",
"next-images": "^1.4.0",
"next-redux-wrapper": "^5.0.0",
"node-sass": "^4.14.1",
"npm": "^6.14.5",
"nprogress": "^0.2.0",
"prop-types": "^15.7.2",
"raw-loader": "^4.0.1",
"react": "^16.13.1",
"react-bootstrap-table": "^4.3.1",
"react-burger-menu": "^2.6.17",
"react-circular-progressbar": "^2.0.3",
"react-countdown": "^2.2.1",
"react-dom": "^16.13.1",
"react-intl": "^3.11.0",
"react-markdown": "^4.3.1",
"react-redux": "^7.2.0",
"react-redux-firebase": "^3.6.0",
"react-redux-toastr": "^7.6.5",
"react-retina-image": "^2.0.5",
"reactstrap": "^8.4.1",
"redux": "^4.0.5",
"redux-devtools-extension": "^2.13.8",
"redux-firestore": "^0.13.0",
"redux-logger": "^3.0.6",
"redux-thunk": "^2.3.0",
"reselect": "^4.0.0",
"sass": "^1.26.8",
"sass-loader": "^8.0.2",
"styled-components": "^5.1.1",
"styled-jsx": "^3.3.0",
"uuid": "^8.1.0",
"validator": "^13.1.1"
},
"devDependencies": {
"babel-eslint": "^10.1.0",
"eslint": "^7.3.1",
"eslint-config-airbnb": "^18.2.0",
"eslint-config-prettier": "^6.11.0",
"eslint-import-resolver-alias": "^1.1.2",
"eslint-plugin-import": "^2.21.2",
"eslint-plugin-jsx-a11y": "^6.3.1",
"eslint-plugin-no-secrets": "^0.6.8",
"eslint-plugin-prettier": "^3.1.4",
"eslint-plugin-react": "^7.20.0",
"eslint-plugin-react-hooks": "^4.0.4",
"eslint-plugin-security": "^1.4.0",
"husky": "^4.2.5",
"lint-staged": "^10.2.11",
"prettier": "^2.0.5",
"prettier-eslint": "^10.1.1",
"prettier-eslint-cli": "^5.0.0",
"serverless-next.js": "^1.15.0-alpha.0",
"snazzy": "^8.0.0"
},
serverless.yml
:
webApp:
component: serverless-next.js@1.15.0-alpha.0
inputs:
useServerlessTraceTarget: true
bucketName: "webAppBucket"
description: "WebApp Client QA NextJS Lambda@Edge for Cloudfront distribution"
name:
defaultLambda: webAppLambda
next.config.js
:
require('dotenv').config();
const withImages = require('next-images');
module.exports = withImages({
crossOrigin: 'anonymous',
target: 'experimental-serverless-trace',
});
Desktop (please complete the following information):
- Node v12.14.1
Issue Analytics
- State:
- Created 3 years ago
- Reactions:2
- Comments:31 (8 by maintainers)
Top Results From Across the Web
Source and destination must not be the same [ERROR]
I have already done a Cordova platform remove android and a Cordova platform add android. I see this issue occurs on Android 8.0.0...
Read more >A brand new website interface for an even better experience!
Error : Source and destination must not be the same. When using useServerlessTraceTarget.
Read more >Serverless Next.js Component - Serverless Framework: Plugins
Use the useServerlessTraceTarget option in serverless.yml . This will cause Next.js to not bundle dependencies into each page (instead creating lightweight ...
Read more >Serverless Next.js Component - Morioh
Use the useServerlessTraceTarget option in serverless.yml . This will cause Next.js to not bundle dependencies into each page (instead creating lightweight ...
Read more >Inputs - Serverless Nextjs
Name Type Default Value
domain Array null
bucketName string null
bucketRegion string us‑east‑1
Read more >Top Related Medium Post
No results found
Top Related StackOverflow Question
No results found
Troubleshoot Live Code
Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start FreeTop Related Reddit Thread
No results found
Top Related Hackernoon Post
No results found
Top Related Tweet
No results found
Top Related Dev.to Post
No results found
Top Related Hashnode Post
No results found
Top GitHub Comments
I was also facing the same issue (getting
Error: Source and destination must not be the same
) and spent some time to debug what’s happening. It seems to originate from: https://github.com/serverless-nextjs/serverless-next.js/blob/d0a630035cab10e6ff70c5706f16c8564227630c/packages/libs/lambda-at-edge/src/build.ts#L106-L128.I am not too familiar with the code, but it looks like it’s copying
node_modules
dependencies into lambda handlers when serverlessTraceTarget is enabled: https://github.com/serverless-nextjs/serverless-next.js/blob/d0a630035cab10e6ff70c5706f16c8564227630c/packages/libs/lambda-at-edge/src/build.ts#L156-L160.In my case,
filelist
somehow had mysrc
andpages
files in it which are.ts
and.tsx
files, which I guess shouldn’t be copied into the Lambda. Thisfilelist
is coming from this line: https://github.com/serverless-nextjs/serverless-next.js/blob/d0a630035cab10e6ff70c5706f16c8564227630c/packages/libs/lambda-at-edge/src/build.ts#L226 (nodeFileTrace
)As a quick debug, I printed out the values of variables from
copyLambdaHandlerDependencies
for mytsx
file:These files like the above fail due to
../../
, since when joining thesrc
anddst
becomes the same, failing the copy and finally theserverless
command. So in this case, it’s not a problem withnode-fs-extra
.It works for files in
node_modules
since the../../node_modules
becomesnode_modules
due to normalization to remove../../
in: https://github.com/serverless-nextjs/serverless-next.js/blob/d0a630035cab10e6ff70c5706f16c8564227630c/packages/libs/lambda-at-edge/src/lib/normalizeNodeModules.tsExample values
Quick Solution
I quickly updated: https://github.com/serverless-nextjs/serverless-next.js/blob/d0a630035cab10e6ff70c5706f16c8564227630c/packages/libs/lambda-at-edge/src/build.ts#L112-L116 but in the compiled
build.js
directly to filter filepaths that didn’t containnode_modules
, and theserverless
command succeeds.The above works (and is a quick fix if you’re just deploying from a local machine, for CI/CD you’d have to find the
build.js
file and do this replacement usingsed
or similar) but not sure if this is a proper fix that should be a PR? I should figure out whyfilelist
has myts
files, I did setbaseUrl: src
in mytsconfig.json
, maybe that’s why?@danielcondemarin will also try to get a minimal repro when I get time (can’t share above code since it’s private), but hopefully this is helpful as a start.
FYI, I am running this on Mac OS 10.15.5 / Macbook Pro 16
Thanks for the repro! I’ve not had a had a chance to look into it but I’m hoping to get some time this weekend.