Это точно такой же вопрос, который задан в TS1128: ожидается объявление или утверждение (конец файла) , но на этот вопрос не было получено ответа.
Я пишу проект NodeJS / JavaScript / Keystone. Моя среда IDE WebStorm указывает на то, что в моем коде есть ошибка (это в конце файла):
Я пытался последовательно комментировать Извлечение / удаление одного раздела кода за раз, пока у меня ничего не осталось. Только если я удалю весь код, ошибка исчезнет.
Понятия не имею, откуда возникла ошибка. Все скобки / скобки, кажется, совпадают. Я также не знаю, является ли это ошибкой TypeScript, ошибкой ESLint или чем-то еще.
Код компилируется, но проект больше не работает должным образом, и мне интересно, является ли тот факт, что ошибка указано указывает на некоторые основные проблемы, которые приводят к сбою проекта.
Код для этого файла:
import { Keystone } from '@keystonejs/keystone';
import { GraphQLApp } from '@keystonejs/app-graphql';
import { AdminUIApp } from '@keystonejs/app-admin-ui';
import { StaticApp } from '@keystonejs/app-static';
import { LocalFileAdapter } from '@keystonejs/file-adapters';
import { IframelyOEmbedAdapter } from '@keystonejs/oembed-adapters';
import { MongooseAdapter } from '@keystonejs/adapter-mongoose';
import { KnexAdapter } from '@keystonejs/adapter-knex';
import { PasswordAuthStrategy } from '@keystonejs/auth-password';
import lists from './lists';
import checkArticlePublishDates from './jobs/checkArticlePublishDates';
import log from './util/log';
import seedDb from './util/seedDb';
require('dotenv').config();
let authStrategy;
const PROJECT_NAME = process.env.PROJECT_NAME;
const iframelyAdapter = new IframelyOEmbedAdapter({
apiKey: process.env.IFRAMELY_KEY
});
const staticPath = 'public';
const staticRoute = '';
const imageFileAdapter = new LocalFileAdapter({
src: `${staticPath}/images`,
path: `${staticRoute}/images`
});
const keystone = new Keystone({
name: PROJECT_NAME,
adapter: new MongooseAdapter()
});
const createAuth = () => {
authStrategy = keystone.createAuthStrategy({
type: PasswordAuthStrategy,
list: 'User',
config: {
identityField: 'username', // default: 'email'
secretField: 'password' // default: 'password'
}
});
};
const createLists = () => lists(keystone, { imageFileAdapter, iframelyAdapter });
const setupCronJobs = async () => {
const checkPub = await checkArticlePublishDates(keystone);
};
const boot = async () => {
createLists();
createAuth();
await keystone.prepare({
cors: { origin: true, credentials: true }
});
await setupCronJobs();
};
boot();
export default {
keystone,
apps: [
new GraphQLApp(),
new AdminUIApp({
adminPath: '/admin',
hooks: require.resolve('./admin/'),
authStrategy,
enableDefaultRoute: true
}),
new StaticApp({
path: '/',
src: 'public',
fallback: 'index.html'
})
]
};
Мой .eslintrc
файл
{
"parser": "babel-eslint",
"parserOptions": {
"ecmaVersion": 2020,
"sourceType": "module",
"ecmaFeatures": {
"jsx": true,
"modules": true
}
},
"extends": [
"eslint:recommended",
"prettier",
"plugin:react/recommended",
],
"plugins": [
"prettier",
"react",
"react-hooks"
],
"env": {
"es6": true,
"node": true,
"mocha": true,
"browser": true
},
"rules": {
"react-hooks/rules-of-hooks": "error",
"react-hooks/exhaustive-deps": "warn",
"react/prop-types": 1,
"react/jsx-uses-react": "error",
"react/jsx-uses-vars": "error",
"react/no-unescaped-entities": "warn",
"react/no-find-dom-node": 0,
"comma-dangle": ["error", "never"],
"global-require": 0
}
}
и мой tsconfig.json
файл
{
"compilerOptions": {
"target": "ES6",
"lib": [
"esnext",
"dom"
],
"skipLibCheck": true,
"outDir": "tsout",
"strict": false,
"forceConsistentCasingInFileNames": true,
"esModuleInterop": true,
"module": "commonjs",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"sourceMap": true,
"alwaysStrict": true,
"jsx": "react"
},
"exclude": [
"node_modules"
]
}