我们正在开发一个使用 npm 工作区的 monorepo。该项目中的一个目录很特殊,因为我们不想允许该目录中的包相互创建导入。我们目前使用 eslint 和“eslint-plugin-import”无限制路径规则来阻止此目录中的包从同级目录导入。
从某些版本的 npm 开始,它开始在 node_modules 中自动创建这些包的符号链接,从而使限制变得毫无用处。我不想阻止所有的node_modules,并且我无法为每个添加的包手动列出所有同级模块。
有没有办法告诉 npm 不要为 node_modules 中的工作区包创建这些符号链接?
我尝试在 TS 项目中设置路径别名,但未能运行。我遇到两个错误npm start:
Module not found: Error: Can't resolve '~/App' in 'D:\work\workbench\templates\template-fe-pure\src'(尽管 VSC 仍然可以查看导入文件的位置;也就是没有波浪线)Resolve error: Cannot find module 'node:fs'我如何进行路径别名导入:
import App from "./App";->import App from "~/App";
在tsconfig.json:("baseUrl": ".","paths": {"~/*": ["./src/*"]},完整文件如下所示)
eslint-plugin-import@2.26.0eslint-import-resolver-typescript@3.2.5:我添加这个是为了使用符合上面的路径别名.eslintrc.json
{
"root": true,
"extends": [
"eslint:recommended",
"plugin:@typescript-eslint/recommended",
"plugin:react/recommended",
"plugin:react-hooks/recommended",
"plugin:jsx-a11y/recommended",
"plugin:import/recommended",
"plugin:import/typescript",
"plugin:eslint-comments/recommended",
"plugin:prettier/recommended",
"prettier"
],
"parser": "@typescript-eslint/parser",
"parserOptions": {
"sourceType": "module",
"ecmaVersion": 6,
"ecmaFeatures": {
"jsx": …Run Code Online (Sandbox Code Playgroud) 我正在尝试对我的 Angular 应用程序中的导入进行排序。我安装并配置了eslint-plugin-import但它似乎不起作用或者我做错了什么
我想像这样对导入进行排序:
在这个示例中,我以随机顺序使用带有虚拟导入的现有组件来检查 eslint --fix 是否有效。我把它粘贴在下面:
import { Observable } from 'rxjs';
import { Injectable } from '@angular/core';
import {
SomeComponentOne,
SomeComponentTwo,
SomeComponentThree,
SomeComponentFour,
} from '@internal-library';
import { SomeModelOne } from './model/some-model-one';
import { SomeModelTwo } from './model/some-model-two';
import { SomeModelThree } from './model/some-model-three';
import { MatSlideToggleModule } from '@angular/material/slide-toggle';
import { MatTooltipModule } from '@angular/material/tooltip';
import { TranslateModule } from '@ngx-translate/core';
import { SomeComponentOne } from './components/some-component-one'; …Run Code Online (Sandbox Code Playgroud) 我在大型反应项目中使用打字稿路径别名。例如,在我的 tsconfig.json 中,我指定了一些路径别名:
{
"baseUrl": "./src",
"paths": {
"@common/*": ["common/*"],
"@settings/*": ["settings/*"],
// other paths
}
}
Run Code Online (Sandbox Code Playgroud)
好的,现在当我想导入一些模块时,我可以使用这些别名。我们也在使用 eslint,我们使用的规则之一是import/order. 它强制任何来自 node_modules 的东西都应该在任何本地模块之前导入。我喜欢这个规则。不使用我的别名:
import React, { useEffect } from "react";
import SomeDistantComponent from '../../common/components/SomeDistantComponent'
import { Formik } from 'formik'
Run Code Online (Sandbox Code Playgroud)
这会抛出 linting 错误,但是根据 eslint 格式化文件会自动将 formik 导入移动到导入上方SomeComponent,这正是我想要的。
然而,在使用我的别名时,这并不会引发错误:
import React, { useEffect } from "react";
import SomeComponent from '@common/components/SomeComponent'
import { Formik } from 'formik'
Run Code Online (Sandbox Code Playgroud)
就好像打字稿路径别名欺骗了import/order规则,现在该规则失效了。
问题:我的 linter 怎么还能识别这些别名路径?我可以配置这个插件的groups或pathGroups …
我希望使用 eslint 强制我的导入遵循标准顺序。
我已经完成了这个工作,但是它会导致一个很长的 eslint 文件,因为我有许多不同的路径,我设置了 TypeScript 别名,我希望在对外部包进行排序时排除 eslint 规则。
我让它像这样工作:
"import/order": [
"error",
{
"groups": ["builtin", "external", "internal"],
"pathGroups": [
{
"pattern": "react*",
"group": "external",
"position": "before"
},
{
"pattern": "Components/**",
"group": "internal"
},
{
"pattern": "Constants/**",
"group": "internal"
}
... more patterns here
],
"pathGroupsExcludedImportTypes": ["react", "internal"],
"alphabetize": {
"order": "asc",
"caseInsensitive": true
}
}
],
Run Code Online (Sandbox Code Playgroud)
我想知道是否有一种方法可以对模式进行分组,这样我就可以做类似这样的事情:
"import/order": [
"error",
{
"groups": ["builtin", "external", "internal"],
"pathGroups": [
{
"pattern": "react*",
"group": "external",
"position": "before"
},
{
"pattern": "Components/**|Constants/**|AnotherAlias/**|AnotherAlias/**", …Run Code Online (Sandbox Code Playgroud) 如果您有一个与默认导出名称相同的文件,为什么需要命名此导出?我不在DRY那儿。
我们有一条规则来阻止匿名默认导出,但是当有人不使用匿名导出时,我该如何做相反的事情并强制出错呢?