Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Local import as symblink in node_module not added in .dist/node_module #272

Open
MaximeLozach opened this issue May 23, 2022 · 4 comments
Open

Comments

@MaximeLozach
Copy link

MaximeLozach commented May 23, 2022

Hi,

I have some import in my project that depends on local commons module shared between my different functions. I don't want to put them on public npm and don't have some kind of nexus.
I import my local common module like this :

"dependencies": {
  "database": "file:../../libs/database",
  "lambda-utils": "file:../../libs/lambda-utils",
  "s3-utils": "file:../../libs/s3-utils",
  ...
}

Until now I was with plain JS and I had no issue with serverless. My node_module seems to be well imported with the symlink of my local modules.
I now try to integrate TS, and so I added your plugin. But when I deploy, at runtime I've got error as my import to my local module can't be found.

{
    "errorType": "Error",
    "errorMessage": "Cannot find package 'database' imported from /var/task/src/functions/get-report-detail.js",
    "code": "ERR_MODULE_NOT_FOUND",
    "stack": [
        "Error [ERR_MODULE_NOT_FOUND]: Cannot find package database' imported from /var/task/src/functions/get-report-detail.js",
        "    at new NodeError (internal/errors.js:322:7)",
        "    at packageResolve (internal/modules/esm/resolve.js:732:9)",
        "    at moduleResolve (internal/modules/esm/resolve.js:773:18)",
        "    at Loader.defaultResolve [as _resolve] (internal/modules/esm/resolve.js:887:11)",
        "    at Loader.resolve (internal/modules/esm/loader.js:89:40)",
        "    at Loader.getModuleJob (internal/modules/esm/loader.js:242:28)",
        "    at ModuleWrap.<anonymous> (internal/modules/esm/module_job.js:76:40)",
        "    at link (internal/modules/esm/module_job.js:75:36)",
        "    at process.runNextTicks [as _tickCallback] (internal/process/task_queues.js:60:5)",
        "    at /var/runtime/deasync.js:23:15"
    ]
}

In S3 where the code is store for my function, I can see that .dist/node_module is missing my local module.

@chinanderm
Copy link

@MaximeLozach Did you ever get this resolved? I'm running into this same issue. Seems this plugin doesn't work with symlinked node_modules packages.

@MaximeLozach
Copy link
Author

Well not really.
We use the registry of gitlab to push our lib as artifact that get imported via npm. The mecanism is the same as public artifact so their is no problem now for us.
But is still think my issue is a problem for project that can't for some reason, put their package on private/public repository.

@wernc23
Copy link

wernc23 commented Jan 13, 2023

Same issue. I have a local symlinked package that is not included in the build package.

@chinanderm
Copy link

I ended up forking the package and using the dereference feature of fs.copySync to copy the symlinked dependencies.

fs.copySync(
  path.resolve('node_modules'),
  path.resolve(path.join(BUILD_FOLDER, 'node_modules')),    
    {
      dereference: true,
    }
 )

Ironically, my forked version ended up being symlinked.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants