Repository navigation
An error with npm start: Error [ERR_UNSUPPORTED_ESM_URL_SCHEME]: Only URLs with a scheme in: file and data are supported by the default ESM loader. On Windows, absolute paths must be valid file:// URLs. Received protocol 'c:' #432
Description
Activity
parse-github-assistant commented
on Apr 23, 2023 More actionsThanks for opening this issue!
Reacted by EhsanParsaniaReacted by Syed Tanvir HossainThe same error use Node.js v18.12.1 at windows 10. The node path module path.resolve return path with driver letter,not file:// protocal.
Error [ERR_UNSUPPORTED_ESM_URL_SCHEME]: Only URLs with a scheme in: file, data are supported by the default ESM loader. On Windows, absolute paths must be valid file:// URLs. Received protocol 'e:'The error is occur at import cloud function,modify node_modules\parse-server\lib\ParseServer.js is running now.o(╥﹏╥)o
let mypath = path.resolve(process.cwd(), cloud); mypath = 'file:///' + mypath.replace(/\\/g, '/'); if (process.env.npm_package_type === 'module' || ((_json = json) === null || _json === void 0 ? void 0 : _json.type) === 'module') { console.log('.....module', mypath) await import(mypath); } else { console.log('.....not module', mypath) require(mypath); }Reacted by Suat Karabacak and EhsanParsaniaReacted by Mikel Calvo and Syed Tanvir Hossainwe are also experiencing this error. Is that a solution for windows users?
Is this a Parse Server issue, rather than a Parse Server example issue? Where is the problematic code?
Hi, I think it's a Parse Server example issue and the problem is the import of the 'non ES module'-file cloud/main.js because of the error message on start with 'node index.js':
Error [ERR_REQUIRE_ESM]: require() of ES Module C:\Tools\TestParseServerExample2\cloud\main.js from C:\Tools\TestParseServerExample2\node_modules\parse-server\lib\ParseServer.js not supported. main.js is treated as an ES module file as it is a .js file whose nearest parent package.json contains "type": "module" which declares all .js files in that package scope as ES modules. Instead rename main.js to end in .cjs, change the requiring code to use dynamic import() which is available in all CommonJS modules, or change "type": "module" to "type": "commonjs" in C:\Tools\TestParseServerExample2\package.json to treat all .js files as CommonJS (using .mjs for all ES modules instead). at ParseServer.start (C:\Tools\TestParseServerExample2\node_modules\parse-server\lib\ParseServer.js:139:13) at async file:///C:/Tools/TestParseServerExample2/index.js:34:3 { code: 'ERR_REQUIRE_ESM' } C:\Tools\TestParseServerExample2\node_modules\parse-server\lib\ParseServer.js:139 require(path.resolve(process.cwd(), cloud)); ^ Error [ERR_REQUIRE_ESM]: require() of ES Module C:\Tools\TestParseServerExample2\cloud\main.js from C:\Tools\TestParseServerExample2\node_modules\parse-server\lib\ParseServer.js not supported. main.js is treated as an ES module file as it is a .js file whose nearest parent package.json contains "type": "module" which declares all .js files in that package scope as ES modules. Instead rename main.js to end in .cjs, change the requiring code to use dynamic import() which is available in all CommonJS modules, or change "type": "module" to "type": "commonjs" in C:\Tools\TestParseServerExample2\package.json to treat all .js files as CommonJS (using .mjs for all ES modules instead). at ParseServer.start (C:\Tools\TestParseServerExample2\node_modules\parse-server\lib\ParseServer.js:139:13) at async file:///C:/Tools/TestParseServerExample2/index.js:34:3 { code: 'ERR_REQUIRE_ESM' }so I renamed cloud/main.js to cloud/main.cjs (and deleted the
awaitin the main.cjs because of an additional error) and the example works ...Reacted by tonyvu197, ymunoz1 and Long Nguyễnspec :
os: window 11
package : node 20.9.0
parse-server-example latest code
In above code I highlighted cloud code line in which I get this same error only on windows and it run perfectly fine on macos what should I do ?
please help @mtrezza
@prafull-opensignlabs i miss the same error too!
this error was resolve:
this param suport function and string type,change it into function
1.man.js
const cloud=function(){ import('./functions.js'); }; export default cloud;
2.index.js:
import cloud from './cloud/main.js'; config = { databaseURI: "xxxxx", cloud, ....otherConfigs, }
@prafull-opensignlabsReacted by Pavel Bakin and Alex Chen@ok111net work like charm 👍
Can this issue be closed?
Can this issue be closed?
As a mention in documentation of parse server , it's not working in windows that's way instead of that we have to use below code to work windows
config = { databaseURI: "xxxxx", cloud: cloud: function () { import('./cloud/main.js'); },, ....otherConfigs, }so you decide @mtrezza
Do you suggest a change in the source code or an amendment to the docs?
I tried @prafull-opensignlabs code, however it didn't work for me, but if somehow this code works, adding this config as an option to the parse-server-example will be a good idea, since many of the parse-server users use Windows OS @mtrezza
I tried @prafull-opensignlabs code, however it didn't work for me, but if somehow this code works, adding this config as an option to the parse-server-example will be a good idea, since many of the parse-server users use Windows OS @mtrezza
I have implement parse server in type : module way instead of common js then it work for me you can try same
Do you suggest a change in the source code or an amendment to the docs?
sure
I have create main.js file which inlcudes my cloud functions
code from main.js file
Parse.Cloud.define('myfunc', async(request) =>{
return "hello world";
});and I have changed this line of code
cloud: process.env.CLOUD_CODE_MAIN || __dirname + '/cloud/main.js'with below code in index.js which config variable which is pass new ParseServer instanceconst config = {
databaseURI: 'mongodb://localhost:27017/dev',
cloud: function () {
import('./cloud/main.js');
},
appId: process.env.APP_ID || 'myAppId',
masterKey: process.env.MASTER_KEY || '',
serverURL: process.env.SERVER_URL
}to start server below code use
const mountPath = process.env.PARSE_MOUNT || '/app';
const server = new ParseServer(config);
await server.start();
app.use(mountPath, server.app);Reacted by EhsanParsania and HALA-7- added a commit that references this issue
on Jan 10, 2024 Do you suggest a change in the source code or an amendment to the docs?
sure
I have create main.js file which inlcudes my cloud functions code from main.js file
Parse.Cloud.define('myfunc', async(request) =>{return "hello world";});and I have changed this line of code
cloud: process.env.CLOUD_CODE_MAIN || __dirname + '/cloud/main.js'with below code in index.js which config variable which is pass new ParseServer instanceconst config = {databaseURI: 'mongodb://localhost:27017/dev',cloud: function () {import('./cloud/main.js');},appId: process.env.APP_ID || 'myAppId',masterKey: process.env.MASTER_KEY || '',serverURL: process.env.SERVER_URL}to start server below code use
const mountPath = process.env.PARSE_MOUNT || '/app';const server = new ParseServer(config);await server.start();app.use(mountPath, server.app);This worked well, thanks @prafull-opensignlabs , but why you've changed
/parseto/appfor the mountPath?Do you suggest a change in the source code or an amendment to the docs?
sure
I have create main.js file which inlcudes my cloud functions code from main.js file
Parse.Cloud.define('myfunc', async(request) =>{return "hello world";});and I have changed this line of code
cloud: process.env.CLOUD_CODE_MAIN || __dirname + '/cloud/main.js'with below code in index.js which config variable which is pass new ParseServer instanceconst config = {databaseURI: 'mongodb://localhost:27017/dev',cloud: function () {import('./cloud/main.js');},appId: process.env.APP_ID || 'myAppId',masterKey: process.env.MASTER_KEY || '',serverURL: process.env.SERVER_URL}to start server below code use
const mountPath = process.env.PARSE_MOUNT || '/app';const server = new ParseServer(config);await server.start();app.use(mountPath, server.app);This worked well, thanks @prafull-opensignlabs , but why you've changed
/parseto/appfor the mountPath?Because I want parse server on
/approute you can change it as per your needReacted by EhsanParsania
my system is windows
node version: Node.js v18.15.0
database: Postgresql
When I run npm start, something went wrong
C:\Users\a\Desktop\Parse-Server>npm start
warn: DeprecationWarning: The Parse Server option 'allowClientClassCreation' default will change to 'false' in a future version.
warn: DeprecationWarning: The Parse Server option 'allowExpiredAuthDataToken' default will change to 'false' in a future version.
Error [ERR_UNSUPPORTED_ESM_URL_SCHEME]: Only URLs with a scheme in: file and data are supported by the default ESM loader. On Windows, absolute paths must be valid file:// URLs. Received protocol 'c:'
at new NodeError (node:internal/errors:399:5)
at throwIfUnsupportedURLScheme (node:internal/modules/esm/resolve:1059:11)
at defaultResolve (node:internal/modules/esm/resolve:1135:3)
at nextResolve (node:internal/modules/esm/loader:163:28)
at ESMLoader.resolve (node:internal/modules/esm/loader:838:30)
at ESMLoader.getModuleJob (node:internal/modules/esm/loader:424:18)
at ESMLoader.import (node:internal/modules/esm/loader:525:22)
at importModuleDynamically (node:internal/modules/cjs/loader:1186:29)
at importModuleDynamicallyWrapper (node:internal/vm/module:429:21)
at importModuleDynamically (node:internal/vm:106:46) {
code: 'ERR_UNSUPPORTED_ESM_URL_SCHEME'
}
node:internal/process/esm_loader:97
internalBinding('errors').triggerUncaughtException(
^
Error [ERR_UNSUPPORTED_ESM_URL_SCHEME]: Only URLs with a scheme in: file and data are supported by the default ESM loader. On Windows, absolute paths must be valid file:// URLs. Received protocol 'c:'
at new NodeError (node:internal/errors:399:5)
at throwIfUnsupportedURLScheme (node:internal/modules/esm/resolve:1059:11)
at defaultResolve (node:internal/modules/esm/resolve:1135:3)
at nextResolve (node:internal/modules/esm/loader:163:28)
at ESMLoader.resolve (node:internal/modules/esm/loader:838:30)
at ESMLoader.getModuleJob (node:internal/modules/esm/loader:424:18)
at ESMLoader.import (node:internal/modules/esm/loader:525:22)
at importModuleDynamically (node:internal/modules/cjs/loader:1186:29)
at importModuleDynamicallyWrapper (node:internal/vm/module:429:21)
at importModuleDynamically (node:internal/vm:106:46) {
code: 'ERR_UNSUPPORTED_ESM_URL_SCHEME'
}
Node.js v18.15.0