IMHO it might be better to have `import.filename` and `import.dirname` as meta properties, to fit in with the language better and to avoid creating *yet another global* (for an admittedly niche use case). It could easily be compiled down via Babel and the likes, and the current `import()` is at stage 3 already IIRC.
(FWIW ES6 modules are sufficiently different enough that I feel it'd be okay to keep a different syntax for it, and to make it a syntactic form, to fit with the syntactic nature of ES modules.) ----- Isiah Meadows [email protected] On Sat, Jan 21, 2017 at 1:22 PM, Andrea Giammarchi <[email protected]> wrote: > Absolutely, and same could be done through the browser if these info are > available and the server grants reading/listing options, which is why I am > exposing exactly the same way NodeJS is doing, through `__filename` and > `__dirname`, both constants and different per each imported module. > > On NodeJS world, and overall in CommonJS environments, these are also > de-facto standard and already there. While a bit ugly, name convention > speaking, I wouldn't mind having the same via `import()`. It would be > nothing new to learn. > > Regards > > On Sat, Jan 21, 2017 at 6:10 PM, Gil Tayar <[email protected]> wrote: >> >> Andrea, >> >> While it is true that "filename/URL" and "dirname" are not really >> important in the browser world, they are used a lot in the Node world to >> read various resources that reside in the same directory (or near the same >> directory) as the module. >> >> On Sat, Jan 21, 2017 at 7:49 PM Andrea Giammarchi >> <[email protected]> wrote: >>> >>> FWIW I have both `__filename` and `__dirname` implemented in common-js >>> package runtime, and these are resolved as absolute path from the root, >>> unless imported externally where these are resolved as absolute URLs. >>> >>> Although I must say beside providing some debuggable information, without >>> a core path module I don't see much added value in having these two >>> references. >>> >>> I still load relatively via `module.import('./lib')` or >>> `module.import('../js/file')` >>> >>> Regards >>> >>> >>> >>> On Sat, Jan 21, 2017 at 5:02 PM, Bradley Meck <[email protected]> >>> wrote: >>>> >>>> Please see >>>> https://github.com/tc39/proposal-dynamic-import#an-actual-function >>>> >>>> As per `"currentDir()" and "currentFile()"` this may not make sense for >>>> all URLs. Please use https://url.spec.whatwg.org/ which ships in Node v7+ >>>> under `require('url').URL` and the proposal to bring it into the language >>>> itself https://github.com/jasnell/proposal-url . Getting the "directory" of >>>> a URL would be ~= `new URL('.', file_url)`. >>>> >>>> On Sat, Jan 21, 2017 at 10:42 AM, Gil Tayar <[email protected]> wrote: >>>>> >>>>> Thanks! >>>>> >>>>> Makes total sense. So why not have Domenic's "import" be a real >>>>> function that comes from this "js:context", thus obviating the need for a >>>>> new JavaScript operator? >>>>> >>>>> While I realize that "js:context" will a Node thing, we could have a >>>>> special import (e.g. import {...} from "js:system") that enables the >>>>> system >>>>> to expose real functions, of which one is "dynamicImport" and others would >>>>> be "currentDir()" and "currentFile()". >>>>> >>>>> In other words - Domenic exposed a real need, but it seems that this >>>>> need is more general, and not specific only to dynamic import, and should >>>>> be >>>>> added to the spec as a special import, just like it may be in Node. >>>>> >>>>> >>>>> On Fri, Jan 20, 2017 at 6:48 PM Bradley Meck <[email protected]> >>>>> wrote: >>>>>> >>>>>> The current trend is towards the >>>>>> https://github.com/nodejs/node-eps/pull/39 rewrite which does not have >>>>>> magic >>>>>> variables >>>>>> https://github.com/bmeck/node-eps/blob/b14276ca093fac9cbc3b72ff5433df35ae67fb59/002-es-modules.md#341-environment-variables >>>>>> >>>>>> There are ideas about exposing the URL of the current ESM via >>>>>> something like >>>>>> https://docs.google.com/presentation/d/1aq_QjBUQTovj9aQZQrVzS7l1aiOs3ZNlk7wgNTUEMy0/edit#slide=id.g16ab11d101_0_22 >>>>>> >>>>>> On Fri, Jan 20, 2017 at 10:42 AM, Gil Tayar <[email protected]> wrote: >>>>>>> >>>>>>> While reading Dominic Denicola's spec for dynamic import() at >>>>>>> https://github.com/tc39/proposal-dynamic-import, I read his rational >>>>>>> for not >>>>>>> having import be a regular function, but rather a "syntactic form". The >>>>>>> idea >>>>>>> is that import() needs to be "in the scope" of the current module, as it >>>>>>> needs to resolve the module path it is given relative to the current >>>>>>> module's. >>>>>>> Thinking about it some more, I thought it would be a pity for import >>>>>>> to be so "special", and asked myself whether there will be more features >>>>>>> that will need to be "module-aware" like import(). >>>>>>> >>>>>>> And there are! (I think...) - __filename and __dirname in NodeJS are >>>>>>> exactly such features. Actually, anything passed to the function >>>>>>> wrapping >>>>>>> each NodeJS module is such a feature, but going over them, only >>>>>>> __filename >>>>>>> and __dirname are not immediately related to the module mechanism. >>>>>>> >>>>>>> So my question is this (and it is specifically addressed to the >>>>>>> NodeJS implementors in the group): in NodeJS's implementation of ES6 >>>>>>> modules, how will __dirname and __filename be implemented? Will there >>>>>>> still >>>>>>> be a function wrapper like in the current module implementation? Or will >>>>>>> __dirname and __filename be a "syntactic form" like import()? Or >>>>>>> something >>>>>>> else? >>>>>>> >>>>>>> Thanks, >>>>>>> Gil Tayar >>>>>>> >>>>>>> _______________________________________________ >>>>>>> es-discuss mailing list >>>>>>> [email protected] >>>>>>> https://mail.mozilla.org/listinfo/es-discuss >>>>>>> >>>>>> >>>> >>>> >>>> _______________________________________________ >>>> es-discuss mailing list >>>> [email protected] >>>> https://mail.mozilla.org/listinfo/es-discuss >>>> >>> > > > _______________________________________________ > es-discuss mailing list > [email protected] > https://mail.mozilla.org/listinfo/es-discuss > _______________________________________________ es-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es-discuss

