rollup.js
code splitting
dynamically import
动态 import 自动触发 分包
// src/main.js
export default function () {
import('./foo.js').then(({ default: foo }) => console.log(foo));
}
dev
alias -> 简略引入
alias 可以实现 @ -> src/components/index 类似的功能,但是从 index 的直接引入会导致单一测试场景,或按需引入场景的额外引入,造成编译过慢。需要 同时配置 tsconfig 与 webpack alias 进行简略引入 的实现。
但由于各方需要的内容不同,dev 中的 alias 需要 eslint,tsconfig,jest 环境都做配置。
tsconfig
dsdocs代表 引入index,在上方添加带 /* 的通配引入,实现简略的精确引入
"paths": {
"dsdocs/*": ["./src/components/*/index"],
"dsdocs": ["./src/index.ts"]
},
可实现类似的效果
dsdocs 为快捷引入,但会引入多余的 index 中的内容,dsdocs/Table 为精确引入。
eslint/webpack
https://webpack.js.org/configuration/resolve/
由于 eslint 相当于读取的 webpack 配置,所以是 webpack 的 alias 判断。
$ 后缀做精准匹配,代表完整的 path string,直接替换,不带后缀则为 path 的部分 string,部分替换 path:
module.exports = {
resolve: {
alias: {
dsdocs: path.resolve(__dirname, './src/components/'),
dsdocs$: path.resolve(__dirname, './src'),
},
},
};
jest
https://www.xspdf.com/resolution/50171412.html
jest 也有自己的 alias 适配内容,为 moduleNameMapper 配置。
与 webpack 类似,实现精准匹配替换,与部分匹配替换:
module.exports = {
moduleNameMapper: {
'dsdocs/(.*)$': '<rootDir>/src/components/$1',
dsdocs: '<rootDir>/src/index.ts',
},
}
Eslint
no-extraneous-dependencies
设置部分文件中的 文件引入 只需在 devDependencies 中存在,不需要在 dependencies 中存在
'import/no-extraneous-dependencies': [
'error',
{
devDependencies: ['**/__test__/*', '**/demo/*'],
},
],
https://github.com/import-js/eslint-plugin-import/blob/master/docs/rules/no-extraneous-dependencies.md
以及还可通过 core-modules 来设置一些 external 的引入:
https://github.com/import-js/eslint-plugin-import#importcore-modules