简体   繁体   中英

How do I get `npm install` to compile my TypeScript module into JS when it is installed by a user?

I built a TypeScript module and pushed it to GitHub. I now want to use this module inside my MyApp as a dependency which is also written in TypeScript. The package is registered in my MyApp/package.json :

  "dependencies": {
    "foo": "github:organization-xyz/foo",
  }

I added a command build-ts to create the corresponding JavaScript bindings inside my foo module foo/package.json :

  "scripts": {
    "build-ts": "tsc"
    ...
  },

Of course, this command is not executed when I call npm i on my main application. How would I properly prepare my module foo in order to import it successfully inside my app?

Put your build command in a package.json prepare script.

For example:

  "scripts": {
    "prepare": "npm run build-ts"
    "build-ts": "tsc"
    ...
  },

prepare is one of the Life Cycle Scripts that are automatically run by npm in certain situations. One of the situations is when package dependencies are installed, as stated in the npm-install docs :

If the package being installed contains a prepare script, its dependencies and devDependencies will be installed, and the prepare script will be run, before the package is packaged and installed.

Since the prepare script is also run before publishing, be sure configure your package.json to not publish the build artifacts.

Since you mentioned that you are publishing it on GitHub, here is some more info specific to that case:

That said...

...if the build does not have dependencies on the install target (eg cpu-architecture), standard practice is to transpile your Typescript into Javascript before publishing. Pretty much everyone does this, including the makers of Typescript. But I'm not going to make the case here...

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM