Skip to content

Commit

Permalink
resolve alias as tsconfig paths, no need in distnode
Browse files Browse the repository at this point in the history
  • Loading branch information
Vitaly Pinchuk committed Jan 11, 2022
1 parent b77d95d commit 8fca781
Show file tree
Hide file tree
Showing 7 changed files with 83 additions and 102 deletions.
7 changes: 3 additions & 4 deletions .eslintrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,9 @@
"plugins": ["import"],
"settings": {
"import/resolver": {
"alias": {
"map": [
["#common", "./src/common"]
]
"node": {},
"typescript": {
"project": "."
}
}
},
Expand Down
2 changes: 1 addition & 1 deletion eslint.rules.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,6 @@
"semi": ["error", "always"],
"spaced-comment": ["error", "always"],
"import/no-default-export": "error",
"import/no-unresolved": ["error", { "ignore": ["\\/.*\\.js"] }]
"import/no-unresolved": ["error", { "ignore": ["\\/dist-gh-pages\\/.*\\.js"] }]
}
}
104 changes: 44 additions & 60 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

19 changes: 7 additions & 12 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,42 +1,37 @@
{
"name": "dist-gh-pages",
"version": "0.3.4",
"version": "0.4.0",
"description": "Simple project for hosting static gh-pages (SPA further).",
"keywords": [
"gh-pages",
"free hosting",
"static site",
"alias"
"alias",
"tsconfig-paths"
],
"repository": {
"type": "git",
"url": "git://github.com/viT-1/dist-gh-pages.git"
},
"scripts": {
"greet.node": "node -r esm -r module-alias/register ./distnode/main.js",
"greet.node": "node -r esm -r tsconfig-paths/register ./src/main",
"lint": "eslint **/*.js",
"copyfiles": "rm -rf dist && mkdir dist && cp -r ./src/** ./dist",
"copyfiles.node": "rm -rf distnode && mkdir distnode && cp -r ./src/** ./distnode",
"replacestr": "node -r esm ./replace-in-file.js",
"replacestr.node": "node -r esm ./replace-in-file.js --greetnode",
"build": "npm run copyfiles && npm run replacestr",
"build.node": "npm run copyfiles.node && npm run replacestr.node",
"predeploy": "npm run build",
"deploy": "gh-pages -d dist"
},
"dependencies": {
"arg": "5.0.1",
"esm": "3.2.25",
"gh-pages": "3.2.3",
"module-alias": "2.2.2",
"tsconfig-paths": "3.12.0",
"replace-in-file": "6.3.2"
},
"devDependencies": {
"eslint": "8.5.0",
"eslint-plugin-import": "2.25.3",
"eslint-import-resolver-alias": "1.1.2"
},
"_moduleAliases": {
"#common": "./distnode/common"
"eslint-import-resolver-node": "0.3.6",
"eslint-import-resolver-typescript": "2.5.0"
}
}
5 changes: 4 additions & 1 deletion readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,7 @@ Simplest project for hosting static gh-pages (SPA further).
Use `npm run deploy` for deploying dist folder to remote (no need to commit) repository on GitHub,
then you can see [demo site](https://vit-1.github.io/dist-gh-pages/).

ESM aliases resolved by hands with [replace-in-file](https://github.com/adamreisnz/replace-in-file) node [script](https://github.com/viT-1/dist-gh-pages/blob/dce502b314fb81b4bf086af6b64fe983ff6cdde9/package.json#L21).
ESM aliases resolved by hands with [replace-in-file](https://github.com/adamreisnz/replace-in-file) node [script](https://github.com/viT-1/dist-gh-pages/blob/dce502b314fb81b4bf086af6b64fe983ff6cdde9/package.json#L21).

This project is not using TypeScript but using tsconfig.json > paths
to have single paths configuration for all (eslint, node, jest)!
40 changes: 16 additions & 24 deletions replace-in-file.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
import arg from 'arg';
import replace from 'replace-in-file';
import eslintConfig from './.eslintrc.json';
import aliasConfig from './tsconfig.json';
import pjson from './package.json';

const { devDependencies, name: ghPagesFolder } = pjson;
const { dependencies, name: ghPagesFolder } = pjson;

const ghPagesModule = { name: 'gh-pages' };
ghPagesModule.ver = devDependencies[ghPagesModule.name];
ghPagesModule.ver = dependencies[ghPagesModule.name];

// replace info in html
replace({
Expand All @@ -25,29 +24,22 @@ let jsStrFrom = new Array(

let jsStrTo = ['', '$1$2$4.js$2', '$1$2$3$4$5/index.js$2'];

// --greetnode flag for node greeting option - no need to replace imports,
// should be resolved (but still isn't) by node native "imports" package.json key
const args = arg({ '--greetnode': Boolean });

// For Node alias resolving without tsc paths transpiling we forced to use module-aliases package,
// because native "imports" aren't working correctly yet: https://github.com/ilearnio/module-alias/issues/113
if (!args['--greetnode']) {
// use eslint configuration for aliases
const eslintAliasMap = eslintConfig.settings['import/resolver'].alias.map;
eslintAliasMap.forEach(item => {
jsStrFrom.push(item[0]);
jsStrTo.push(
// bad code, inner knowledge, root is .io not project!
item[1].replace(
'./src/',
`/${ghPagesFolder}/`,
));
});
}
// TODO: instead regex replacing alias map (bad replace '/*'), use tsconfig-paths createMatchPath
// use eslint configuration for aliases
const aliasMap = aliasConfig.compilerOptions.paths;
Object.keys(aliasMap).forEach(key => {
jsStrFrom.push(key.replace('/*', ''));
jsStrTo.push(
// bad code, inner knowledge, wwwroot is viT-1.io not this project root!
aliasMap[key][0].replace('/*', '').replace(
'./src/',
`/${ghPagesFolder}/`,
));
});

// replace imports in esm
replace({
files: args['--greetnode'] ? './distnode/**/*.js' : './dist/**/*.js',
files: './dist/**/*.js',
from: jsStrFrom,
to: jsStrTo,
});
8 changes: 8 additions & 0 deletions tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"#common/*": ["./src/common/*"]
}
}
}

0 comments on commit 8fca781

Please sign in to comment.