Reputation: 7289
How do I use chmod with Node.js?
There is a method in the package fs
, which should do this, but I don't know what it takes as the second argument.
fs.chmod(path, mode, [callback])
Asynchronous chmod(2). No arguments other than a possible exception are given to the completion callback.
fs.chmodSync(path, mode)
Synchronous chmod(2).
(from the Node.js documentation)
If I do something like
fs.chmodSync('test', 0755);
nothing happens (the file isn't changed to that mode).
fs.chmodSync('test', '+x');
doesn't work either.
I'm working on a Windows machine btw.
Upvotes: 59
Views: 59139
Reputation: 2505
On Windows, instead of on Octal number or string, you need to use fs.constants
or fsPromises.constants
. For example, to change a file to open for read only access you would use:
fs.chmodSync(filePath, fs.constants.O_RDONLY)
You can find the values for fs.constants
here: Node File System Constants
Upvotes: 1
Reputation: 726
The correct way to specify Octal is as follows:
fs.chmodSync('test', 0o755);
Refer to the file modes here.
Upvotes: 25
Reputation: 18219
According to its sourcecode /lib/fs.js
on line 508:
fs.chmodSync = function(path, mode) {
return binding.chmod(pathModule._makeLong(path), modeNum(mode));
};
and line 203:
function modeNum(m, def) {
switch (typeof m) {
case 'number': return m;
case 'string': return parseInt(m, 8);
default:
if (def) {
return modeNum(def);
} else {
return undefined;
}
}
}
it takes either an octal number or a string.
e.g.
fs.chmodSync('test', 0755);
fs.chmodSync('test', '755');
It doesn't work in your case because the file modes only exist on *nix machines.
Upvotes: 71