Comments (36)
@mohsenkhanpour @shadowtime2000 Custom server is ready in the latest branch.
with deno std http server:
import { serve } from "https://deno.land/std/http/server.ts"
import { Application, Server } from "https://deno.land/x/aleph/server/mod.ts"
const app = new Appliaction()
const server = new Server(app)
const s = serve({ port: 8080 })
for await (const r of s) {
server.handle(r)
}
with oak:
import { Application as Oak } from "https://deno.land/x/oak/mod.ts";
import { Application, Server } from "https://deno.land/x/aleph/server/mod.ts"
const oak = new Oak()
const app = new Appliaction()
const server = new Server(app)
oak.use((ctx) => {
server.handle(ctx.request)
})
await oak.listen({ port: 8080 })
from aleph.js.
Server choice of std vs oak might be an option that could be picked from when the Init UI (#47) is in place. Could skip the need for documentation.
I don't think this is the best way to do this - a custom server is a more "advanced" configuration so users should be able to implement it on their own.
from aleph.js.
Aleph.js looks very promising. I have some suggestions:
- Designing a plugin API so the community can also contribute to ecosystem.
- Using a monorepo, so the code related to core and plugins, and examples are separated.
- Use a folder named
static
for holding static files and build output topublic
rather thanoutput
. This is usually the convention and hosting services have defaults for this folder. - Regarding: support custom server(oak?) -> You can see Sapper for implementation references.
- Create a Discord server for communication.
from aleph.js.
@shinspiegel @shadowtime2000 this https://github.com/TooTallNate/vercel-deno can help, we should fork it to support aleph's routing
from aleph.js.
- the plugin system is vary simple, currently only support module import resolve and transform code, since we don't use webpack/rollup/babel. (api)
- oh sorry! i think
static
should be a sub-folder of thepublic
folder, Aleph.js server will serve thepublic
dir as root directly. All files inpublic
folder will be copied tooutput
dir by SSG
for example, you want put some javascript or css, even wasm files in your applicationpublic
and you have some images:- /public/static/images/logo.png -> /static/images/logo.png
- /public/styles/global.css -> /styles/global.css
- /public/scritps/42.wasm -> /scritps/42.wasm
- /public/ga.js -> /ga.js
- /public/favicon.icon -> /favicon.icon
from aleph.js.
Server choice of std vs oak might be an option that could be picked from when the Init UI (#47) is in place. Could skip the need for documentation.
from aleph.js.
@Lite5h4dow the docs updating will land later includes the plugin writing guid!
from aleph.js.
@Lite5h4dow https://alephjs.org/docs/api-reference/plugin-api it is
from aleph.js.
@shinspiegel If you take a look at the serverless functions Vercel docs it seems like only NodeJS is supported for serverless functions. Once Deno is supported, it should be able to work fine, though it may need some communication with the team on serverless functions for Vercel.
from aleph.js.
@mohsenkhanpour That is probably what is going on, NextJS says you can't get the advantages of a serverless architecture when using a custom server implementation, I think it is best to go with that for now... we can probably implement conversion or something in v0.4.
from aleph.js.
@Hunam6 I don't think popularity should be the deciding factor. Just because many people use it shouldn't really mean that the choice should be available. Going for a custom server architecture instead of a basic serverless like option is something that should only done once you have a full grasp because if you mess up the entire app goes down. I think it is a good idea to instead kind of "force" people to read the docs on it so they can understand.
from aleph.js.
Is Vue/pluggable-frameworks still a v0.4.0 goal? There's no specific issue for it that I can find, so there's nothing listed under milestones about it either, just passing mentions.
from aleph.js.
use https://alephjs.org/mod.ts import URL
Are the urls not going to be versioned?
from aleph.js.
@lucacasonato https://alephjs.org/mod.ts
may map to the cli version during the compilation, it's a vague idea
from aleph.js.
Interesting. I would be careful about magic resolving like that though. It will break all kinds of tooling (deno info, deno cache, deno vscode extension).
from aleph.js.
@mohsenkhanpour thanks for your kind suggestions!
- Aleph.js already has a plugin system, pleas check plugins and example.
- Aleph.js works in Deno,
monorepo
is just Url prefix, will do in the future on-demand. - this repository is a library, directory
public
anddist
(SSG output) will be applied in your application. - i like Sapper too.
- will consider, any suggestion?
from aleph.js.
- Yes, I checked plugins and examples. What I meant was like a more elaborate API, for example Gatsbyjs provides some hooks to Gatsby lifecycle like
onPreBuild
,onPostBuild
...
also as I see now plugins don't accept options.
For example config for plugin could be:
// For default options:
plugins: [`aleph-plugin-sass`]
// For customized option:
plugins: [
{
resolve: `aleph-plugin-sass`,
options: {
postCssPlugins: [somePostCssPlugin()],
precision: 6,
},
},
]
also having a naming convention for plugins would be very helpful, Gatsby uses like
gatsby-plugin-*
: For general plugins like sass, less, analytics, CSP, manifest.
gatsby-transformer-*
: For transformers plugins like image optimization, markdown transformation.
gatsby-source-*
: For sourcing data during build. Using these plugins you can source data from many source: markdown, yaml, wordpress, ....
gatsby-theme-*
: These are themes that come with preconfigured options.
Having these kinds of convention can give meaningful purpose to plugin system and lead to a rich ecosystem.
2.Yes. What I meant was like less tangled folder structure. This is not necessary now as you said, however as the number of examples and plugins increase it could be a wise idea.
3.I wasn't talking about this repository, I was talking about the application. In the docs it says put your static files in public
folder, and build command outputs a output
folder.
Using public
folder to hold static assets may cause hosting automation to think it should serve public
folder, whereas it should serve output
folder.
Using static
folder for static assets, and building to public
is more conventional.
5.Just create a server, and put the link on the website/repo Readme.md , and please invite us.
from aleph.js.
@ije
Also supporting CSS modules:
// For global CSS
import ".\style.css"
and
// For CSS modules
import styles from ".\style.module.css"
CRA, Next.js, and Gatbsyjs all support this out of the box.
from aleph.js.
@mohsenkhanpour CSS modules will be supported directly in the future.
from aleph.js.
What is needed for the API functions to be available in the Vercel?
from aleph.js.
I have tried serverless with Deno, Vercel definitely supports it. Vercel also supports Python, Ruby and Go.
Netlify Functions currently support JavaScript (with the option to bundle npm dependencies from package.json) and Go.
@ije @shadowtime2000 @shinspiegel
As far as I know serverless functions are not dependent on the client side library. You send a request and you receive a response.
Routing is often handled by client side routing libraries. I would say tying routing to serverless functions, and making it a requirement to use Vercel Deno for routing is an extremely fragile architecture.
Why do you say it should be forked to support Aleph's routing?
from aleph.js.
@masataka The APIRequest
of Aleph is not a standard ServerRequest
of std which vercel-deno is using, we need to inject router info base on api file path and support dynamic api routes:
// /api/hello/[name].ts
import type { APIRequest } from "https://deno.land/x/aleph/types.ts"
export default function handler(req: APIRequest) {
req.status(200).json({ name: 'Hello ' + req.params.name })
}
This can not work in Vercel with vercel-deno.
from aleph.js.
@ije I see. I confused it with client side routes, however you are refereeing to API routes.
It's like server routes of Sapper, and Dynamic api routes of Next.js.
So these API dynamic routes will also work for dev server, and production server (for example if you want to self host, Aleph).
I suppose Netlify doesn't support such feature. Have you done any research?
from aleph.js.
@shinspiegel @shadowtime2000 this https://github.com/TooTallNate/vercel-deno can help, we should fork it to support aleph's routing
Forking it would be a great idea. I suppose people who use other frameworks could also benefit from using Deno on the serverless side.
@ije BTW have you thought of how to implement custom server (oak)? I see it is in the check list, but there isn't much discussion about it.
How does Sapper's custom server and custom API routing work?
This is the custom server of default Sapper template:
https://github.com/sveltejs/sapper-template/blob/master/src/server.js
To make it work with Vercel's dynamic routing they just default
export the custom server instance.
https://github.com/thgh/vercel-sapper
It's a bit confusing. Is Vercel able to run custom server instance?
from aleph.js.
It's a bit confusing. Is Vercel able to run custom server instance?
I don't believe so, Vercel runs on AWS Lambda and is purely serverless hence the cheaper pricings with frameworks like NextJS and BlitzJS (and soon AlephJS) with stuff like API routes
from aleph.js.
@shadowtime2000 It might be that https://github.com/thgh/vercel-sapper converts the custom server to serverless friendly code.
How do you think Aleph can implement custom server (eg. oak) in a serverless compatible way?
from aleph.js.
We could look into using an adapter system kind of like SvelteKit where you plug an adapter into the aleph.config.(ts|js)
. It could be possible to have Vercel support with the File System API though that sadly only supports Node. We could also just do it without the file system API. This requires some further research
from aleph.js.
It seems like with the new project restructure the only thing we need JSDoc in now is redirect
. I guess JSDoc for internal code would be pretty cool because it makes it easier for potential contributors to understand the codebase.
EDIT: actually i think there are a couple other functions we need JSDoc for tho too
from aleph.js.
@shadowtime2000 good to hear that! writing JSDoc is always hard for me...
from aleph.js.
Great work.
I will update the website and write docs for it.
What is the default path for custom server?
from aleph.js.
I disagree, oak is the Deno module (not NodeJS too, only Deno) with the most stars listed on deno.land. It means that many people use it, this choice should be available.
from aleph.js.
@ije I think we need to add more details to Contributing.md
on how to start
and test
application
from aleph.js.
What's the current state of Vercel API functions? I can help
Maybe we can fork vercel-deno? https://github.com/TooTallNate/vercel-deno
from aleph.js.
this probably isnt the best place to put this but could anyone give me some pointers on making a plugin for Aleph?
from aleph.js.
Thankyou 😊
from aleph.js.
What's the current state of Vercel API functions? I can help
Maybe we can fork vercel-deno? https://github.com/TooTallNate/vercel-deno
i implemented this forked from @lucacasonato prior works at https://github.com/alephjs/vercel-aleph
from aleph.js.
Related Issues (20)
- Feature to prevent router redirects HOT 3
- Mobile website layout
- Get HOST from http request HOT 1
- Expose unocss option for other templates like react-mdx
- Improve support for extensions. HOT 3
- Error: Uncaught (in promise) TypeError: serverEntry.startsWith is not a function HOT 6
- When do you plan to release the stable version? HOT 1
- Deployed React example todo not working properly
- Extension issue in browser. HOT 2
- How to handle WebSockets? HOT 1
- SSR TypeError: Cannot read properties of null (reading 'useState') HOT 9
- Client side routing breaks middleware? HOT 5
- vue template script does not work HOT 1
- Not importing aleph/react breaks the build
- How to build with GraphQL Server? HOT 1
- How to use headlessui HOT 1
- useData hook and whatever method of hydrating data is currently not adequately implemented.
- Creating Dark Mode Option HOT 3
- Error: `TypeError: dispatcher is null`
- Cannot import from npm. HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from aleph.js.