Open jacobrask opened 10 years ago
Is there any way to use CommonJS or npm modules in CocoaScript for now? @jacobrask
No there isn't.
Yes you can: https://github.com/mathieudutour/sketch-builder
Neat
@ccgus I worked on this a bit and have a POC working in Sketch, going to be released in 49.
Basically, I added a require
global. It is kind of the counterpart of the @import
syntax of CocoaScript but for working with node packages: you need to use module.exports
to expose what you want, it doesn’t pollute the global scope, it is dynamic, etc.
For now, it has a very simple resolver algorithm:
sketch
..
, it’s a relative path and I’m looking for a js file starting from the command file.So it doesn’t handle nested relative require very well (it's working if you have your require in the top level; but not if they are in a function, it will look for the package starting from where the function is executed), nor looking for a node_modules
folder.
In parallel, I started to create a few packages to mirror the NodeJS API: fs
to replace the use of NSFileManager
, child_process
for NSTask
, etc.. The goal is multiple:
npm
packages without worrying whether it’s using some node API!Later, when those packages are finished, we will probably ship them with Sketch directly.
I understand that it's vision that might not match the one you have for CocoaScript
so I preferred asking here if it's worth for me creating a PR to upstream this or not.
Yep, make the PR. This would be pretty cool to have.
Allowing require() in addition to the import macro would enable you to use a bunch of modules from the npmjs repository in your CocoaScript code.
If a depended on module is using Node APIs it would obviously not run in a CocoaScript environment, but a lot of the modules in npm are simple cross-platform JavaScript libraries like underscore.js.
CocoaScript modules could be submitted to npm, and you have a package manager for free.