我正在嘗試從我在 Sveltekit 中創建的示例應用程式構建一個 docker 映像。
我正在使用 @sveltejs/adapter-auto 并且在我的路由檔案夾中包含了用于 API 呼叫的 .js 檔案和 .svelte 檔案。
這是我的 Dockerfile(構建良好,但可能不正確)
FROM node:14.15.0 as build
# install dependencies
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci
# Copy all local files into the image.
COPY . .
RUN npm run build
###
# Only copy over the Node pieces we need
# ~> Saves 35MB
###
FROM node:14.15.0
WORKDIR /app
COPY --from=build /app/.svelte-kit/build/. .
EXPOSE 3000
CMD ["node", "./app.js"]
當我嘗試從 docker 映像運行容器時,出現錯誤輸出
(node:1) Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs extension.
(Use `node --trace-warnings ...` to show where the warning was created)
/app/app.js:1
import { respond } from '@sveltejs/kit/ssr';
^^^^^^
SyntaxError: Cannot use import statement outside a module
at wrapSafe (internal/modules/cjs/loader.js:979:16)
at Module._compile (internal/modules/cjs/loader.js:1027:27)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12)
at internal/main/run_main_module.js:17:47
我的 package.json 確實包含 "type": "module"
{
"name": "backendtest",
"version": "0.0.1",
"scripts": {
"dev": "svelte-kit dev",
"build": "svelte-kit build",
"package": "svelte-kit package",
"preview": "svelte-kit preview",
"lint": "prettier --ignore-path .gitignore --check --plugin-search-dir=. .",
"format": "prettier --ignore-path .gitignore --write --plugin-search-dir=. ."
},
"devDependencies": {
"@sveltejs/adapter-auto": "next",
"@sveltejs/kit": "next",
"prettier": "^2.4.1",
"prettier-plugin-svelte": "^2.4.0",
"svelte": "^3.44.0"
},
"type": "module",
"dependencies": {
"dotenv": "^10.0.0",
"mongodb": "^4.2.1"
}
}
當我嘗試npm run build在本地構建環境中運行時,我收到訊息。
Using @sveltejs/adapter-auto
Could not detect a supported production environment. See https://kit.svelte.dev/docs#adapters to learn how to configure your app to run on the platform of your choosing
由于我是苗條的新手,不確定這是否正確。
如果我嘗試使用節點配接器,則會收到錯誤訊息
config.kit.adapter should be an object with an "adapt" method. See https://kit.svelte.dev/docs#adapters
Error: config.kit.adapter should be an object with an "adapt" method. See https://kit.svelte.dev/docs#adapters
at file:///Users/simon/development/svelte/my-app/node_modules/@sveltejs/kit/dist/cli.js:391:12
at file:///Users/simon/development/svelte/my-app/node_modules/@sveltejs/kit/dist/cli.js:599:43
at file:///Users/simon/development/svelte/my-app/node_modules/@sveltejs/kit/dist/cli.js:585:18
at file:///Users/simon/development/svelte/my-app/node_modules/@sveltejs/kit/dist/cli.js:585:18
at validate_config (file:///Users/simon/development/svelte/my-app/node_modules/@sveltejs/kit/dist/cli.js:739:9)
at load_config (file:///Users/simon/development/svelte/my-app/node_modules/@sveltejs/kit/dist/cli.js:704:20)
at async get_config (file:///Users/simon/development/svelte/my-app/node_modules/@sveltejs/kit/dist/cli.js:774:10)
at async file:///Users/simon/development/svelte/my-app/node_modules/@sveltejs/kit/dist/cli.js:884:18
這是我的 svelte.config.js 內容
import adapter from '@sveltejs/adapter-node';
/** @type {import('@sveltejs/kit').Config} */
const config = {
kit: {
adapter: adapter(),
// hydrate the <div id="svelte"> element in src/app.html
target: '#svelte'
}
};
export default config;
我還按照 github 檔案嘗試了以下 svelte.config.js,但得到相同的“適應”錯誤
import adapter from '@sveltejs/adapter-node';
/** @type {import('@sveltejs/kit').Config} */
const config = {
kit: {
adapter: adapter({
// default options are shown
out: 'build',
precompress: false,
env: {
host: 'HOST',
port: 'PORT',
},
}),
},
};
export default config;
uj5u.com熱心網友回復:
將您的 package.json 包含在您的最終 docker 映像中
編輯:我也不確定您是否應該使用 .svelte-kit/build,因為這是 sveltekit 內部使用的中間結果。運行構建任務后應該有一個構建檔案夾,但我不確定因為我從未使用過自動配接器,我通常使用節點配接器。
我的基本上是這樣的:
COPY --from=build /app/package.json /app/build /app/
CMD ["node", "index.js"]
uj5u.com熱心網友回復:
嘗試復制整個檔案夾如下:
FROM node:14.15.0 as build
# install dependencies
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci
# Copy all local files into the image.
COPY . .
RUN npm run build
###
# Only copy over the Node pieces we need
# ~> Saves 35MB
###
FROM node:14.15.0
WORKDIR /app
COPY --from=build /app .
COPY . .
EXPOSE 3000
CMD ["node", "./app.js"]
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/378416.html
