ccgus / CocoaScript

JavaScript + the Cocoa frameworks, and then ObjC brackets show up to party as well.
Other
618 stars 58 forks source link

CommonJS and npm integration #16

Open jacobrask opened 10 years ago

jacobrask commented 10 years ago

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.

NickolasHu commented 8 years ago

Is there any way to use CommonJS or npm modules in CocoaScript for now? @jacobrask

ccgus commented 8 years ago

No there isn't.

mathieudutour commented 8 years ago

Yes you can: https://github.com/mathieudutour/sketch-builder

ccgus commented 8 years ago

Neat

mathieudutour commented 6 years ago

@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:

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:

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.

ccgus commented 6 years ago

Yep, make the PR. This would be pretty cool to have.