从adapter-node生成的构建在官方SvelteKit示例中不起作用。

huangapple go评论114阅读模式
英文:

Build generated from adapter-node is not working for official SvelteKit example

问题

我正在尝试官方的SvelteKit示例,网址是https://realworld.svelte.dev/。
它的代码托管在https://github.com/sveltejs/realworld

我尝试使用adapter-node生成此项目的SSR构建。

我的svelte.config.js如下:

  1. import adapter from '@sveltejs/adapter-node';
  2. export default {
  3. kit: {
  4. adapter: adapter({ out: '/tmp/realworld' })
  5. }
  6. };

我运行npm run build来生成构建。

我运行node /tmp/realworld/index.js但是遇到了错误:

  1. alok@alok-HP-Laptop-14s-cf3xxx:~/tmp/test-svelte/realworld$ node /tmp/realworld/index.js
  2. (node:256781) Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs extension.
  3. (Use `node --trace-warnings ...` to show where the warning was created)
  4. /tmp/realworld/index.js:1
  5. import { handler } from './handler.js';
  6. ^^^^^^
  7. SyntaxError: Cannot use import statement outside a module
  8. at Object.compileFunction (node:vm:360:18)
  9. at wrapSafe (node:internal/modules/cjs/loader:1088:15)
  10. at Module._compile (node:internal/modules/cjs/loader:1123:27)
  11. at Module._extensions..js (node:internal/modules/cjs/loader:1213:10)
  12. at Module.load (node:internal/modules/cjs/loader:1037:32)
  13. at Module._load (node:internal/modules/cjs/loader:878:12)
  14. at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
  15. at node:internal/main/run_main_module:23:47
  16. Node.js v18.12.1

package.json文件如下:

  1. {
  2. "name": "realworld.svelte.dev",
  3. "version": "1.0.1-next.0",
  4. "private": true,
  5. "license": "MIT",
  6. "type": "module",
  7. "scripts": {
  8. "dev": "vite dev",
  9. "build": "vite build",
  10. "preview": "vite preview",
  11. "lint": "prettier --check --plugin-search-dir=. .",
  12. "format": "prettier --write --plugin-search-dir=. ."
  13. },
  14. "devDependencies": {
  15. "@sveltejs/adapter-node": "^1.0.0",
  16. "@sveltejs/adapter-vercel": "^1.0.0",
  17. "@sveltejs/kit": "^1.0.0",
  18. "marked": "^4.2.1",
  19. "prettier": "^2.7.1",
  20. "prettier-plugin-svelte": "^2.8.0",
  21. "svelte": "^3.54.0",
  22. "typescript": "^4.9.4",
  23. "vite": "^4.0.0"
  24. }
  25. }

我该如何使这个构建工作?

英文:

I am trying offical SvelteKit example https://realworld.svelte.dev/.
Its code is hosted at https://github.com/sveltejs/realworld

I tried to generate SSR build out of this project using adapter-node

My svelte.config.js is

  1. import adapter from '@sveltejs/adapter-node';
  2. export default {
  3. kit: {
  4. adapter: adapter({ out: '/tmp/realworld' })
  5. }
  6. };

I am running npm run build to generate build.

I am running node /tmp/realworld/index.js but getting errors

  1. alok@alok-HP-Laptop-14s-cf3xxx:~/tmp/test-svelte/realworld$ node /tmp/realworld/index.js
  2. (node:256781) Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs extension.
  3. (Use `node --trace-warnings ...` to show where the warning was created)
  4. /tmp/realworld/index.js:1
  5. import { handler } from './handler.js';
  6. ^^^^^^
  7. SyntaxError: Cannot use import statement outside a module
  8. at Object.compileFunction (node:vm:360:18)
  9. at wrapSafe (node:internal/modules/cjs/loader:1088:15)
  10. at Module._compile (node:internal/modules/cjs/loader:1123:27)
  11. at Module._extensions..js (node:internal/modules/cjs/loader:1213:10)
  12. at Module.load (node:internal/modules/cjs/loader:1037:32)
  13. at Module._load (node:internal/modules/cjs/loader:878:12)
  14. at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
  15. at node:internal/main/run_main_module:23:47
  16. Node.js v18.12.1

package.json file is

  1. {
  2. "name": "realworld.svelte.dev",
  3. "version": "1.0.1-next.0",
  4. "private": true,
  5. "license": "MIT",
  6. "type": "module",
  7. "scripts": {
  8. "dev": "vite dev",
  9. "build": "vite build",
  10. "preview": "vite preview",
  11. "lint": "prettier --check --plugin-search-dir=. .",
  12. "format": "prettier --write --plugin-search-dir=. ."
  13. },
  14. "devDependencies": {
  15. "@sveltejs/adapter-node": "^1.0.0",
  16. "@sveltejs/adapter-vercel": "^1.0.0",
  17. "@sveltejs/kit": "^1.0.0",
  18. "marked": "^4.2.1",
  19. "prettier": "^2.7.1",
  20. "prettier-plugin-svelte": "^2.8.0",
  21. "svelte": "^3.54.0",
  22. "typescript": "^4.9.4",
  23. "vite": "^4.0.0"
  24. }
  25. }

How can I make this build working?

答案1

得分: 1

根据https://github.com/sveltejs/realworld README所述,你需要在使用npm run build构建项目之后,使用npm run preview启动项目。

经过测试,本地环境(MacOS,Node 18.12.1)上正常运行,使用默认端口4173。

svelte.config.js

  1. import adapter from '@sveltejs/adapter-node';
  2. export default {
  3. kit: {
  4. adapter: adapter()
  5. }
  6. };

注意:此默认设置将在项目根目录的build目录中定位你的构建文件。

编辑:

可以选择构建到诸如/tmp/realworld之类的位置,但请注意:

  • 如果构建目录是绝对路径,该路径相对于你的文件系统的根目录
  • 仍然需要使用npm run preview来启动项目
英文:

As stated by the https://github.com/sveltejs/realworld README, you need to start the project with npm run preview after building it with npm run build.

Tested, works locally on my machine (MacOS w/ Node 18.12.1), running on (default) port 4173.

svelte.config.js:

  1. import adapter from '@sveltejs/adapter-node';
  2. export default {
  3. kit: {
  4. adapter: adapter()
  5. }
  6. };

Note: this default setup will locate your build in the build directory at the root of your project.

Edit:

You can choose to build into a location such as /tmp/realworld, but bear in mind that:

  • if the build directory is an absolute path, this path is relative to the root of your filesystem

  • you still need to launch with npm run preview

huangapple
  • 本文由 发表于 2023年1月7日 18:02:12
  • 转载请务必保留本文链接:https://go.coder-hub.com/75039452.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定