I'm creating my first app using TypeScript. I'm trying to import a class that I've created in a seperate .ts file that is at the root level with main.ts. I've tried using both of the following to import the file in main.ts...
import * as myclass from './myclass';
const myclass = require( './myclass ' );
When I activate a flow with my app, I get an error message that my class module can't be found as it's being looked for in the node_modules directory instead of in the root directory.
Cannot find module '<path to my app>\node_modules\myclass' Require stack: - C:\Program Files\Enfocus\Enfocus Switch\ScriptExecutor\NodeScriptExecutor.js
What is the proper way to include my own modules?
importing/require myclass.ts module
Re: importing/require myclass.ts module
Is this for an app or for a local script?
If it is for a local script, use the complete path to the file instead of a relative path.
If it is for an app or for another situation in which the usage of a complete path is not possible or desirable, you will have to make sure that your own module ends up in node_modules. The way to do that is to create that module in some other location away from your script. Make sure it is a folder with a package.json file that is correctly configured (npm init) and then in the script folder you do an npm install of the folder with your module.
Note that this takes a snapshot of your own module into the node_modules folder of the script, so if you make changes to the module you have to npm install it again.
If it is for a local script, use the complete path to the file instead of a relative path.
If it is for an app or for another situation in which the usage of a complete path is not possible or desirable, you will have to make sure that your own module ends up in node_modules. The way to do that is to create that module in some other location away from your script. Make sure it is a folder with a package.json file that is correctly configured (npm init) and then in the script folder you do an npm install of the folder with your module.
Note that this takes a snapshot of your own module into the node_modules folder of the script, so if you make changes to the module you have to npm install it again.
Re: importing/require myclass.ts module
Spent a few days back and forth trying to set configurations in tsconfig.json to fix this. After enough failures, found a very illogical answer to this.
should be
For whatever reason, NodeScriptExecutor.js defaults every single import path to the node_modules folder. Nothing I've tried in altering the tsconfig.json changes the handling of paths. Changing `./` to `../` effectively allows the program to still use dynamic pathing, while staying functional in its approach.
Still a basic implementation. Seems to work in packed and unpacked environments. Too early to say if this will cause issues down the line, but at least a basic fix to this weird problem.
Looking for some automated solution to set the global path on main.ts, but will keep this thread updated if I find a good way of explicitly stating "hey, these require statements look like they shouldn't work, but this is just how Switch works." Hopefully something like...
But haven't found anything on npm that does this quite yet. Should be an easy explicit fix once found. For now, I'll just be using the illogical '../myclass' instead of './myclass'
Important caveats:
Code: Select all
const myclass = require('./myclass');
Code: Select all
const myclass = require('../myclass');
Still a basic implementation. Seems to work in packed and unpacked environments. Too early to say if this will cause issues down the line, but at least a basic fix to this weird problem.
Looking for some automated solution to set the global path on main.ts, but will keep this thread updated if I find a good way of explicitly stating "hey, these require statements look like they shouldn't work, but this is just how Switch works." Hopefully something like...
Code: Select all
const spc = require('switch-path-correcter')
const myclass = require(spc('./myclass'));
Important caveats:
- You can only import internal modules using CommonJS syntax of `const foo = require('../foo.js');`. Using `import foo from '../foo.js';` will cause a TS error. It won't throw any transpile errors, but will throw log errors in Switch because it technically didn't transpile correctly.
Alastair Scheuermann, Software Engineer @ Sun Print Solutions
Connect with me on LinkedIn
Connect with me on LinkedIn