npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

gulp-ts-link

v1.1.1

Published

Creates a SINGLE, MODULE-FREE TypeScript or JavaScript file from multiple TS or JS source files that use TS/ES6 modules.

Downloads

5

Readme

gulp-ts-link Build Status

Build a good ol' fashioned nonmodular, ES3 compatible, single file JavaScript library to run in a browser, while preserving all of the awesome code organization benefits that come from using multiple source files and TypeScript modules during development. No more Webpack weirdness in your transpiled code. Because sometimes, you can have it all.

Installation

Make sure you have npm, then run the console command npm install gulp-ts-link --save-dev

Usage

Preparation

To get started, you will need an entry file -- the place where all your individual TypeScript source files will come together to form a single TypeScript file, which you will in turn transpile to create your JavaScript library. The order in which your source files are included in your entry file is manually defined using comment directives. For example:

index.tslink.ts

let myLibrary = (function(){
    // @tslink:inject source-file-a.ts
    
    // @tslink:inject source-file-b.ts
    
    // @tslink:inject source-file-c.ts
    
    let lib = new MyMainClass();
    
    return lib;
})();

In this example our entry file wraps our library in an IIFE (Immediated-Invoked Function Expression) to avoid polluting the global object, and uses the @tslink:inject [path-to-source-file] directive to specify where to place each of the source files in the output file.

IMPORTANT: When an absolute path is not given, the path specified in a @tslink:inject directive is relative to the location of the file containing the directive.

Of course, having all of your @tslink:inject directives in one file can become difficult to manage if you have several source files. Files referenced with @tslink:inject may also contain @tslink:inject directives, so if you have a project structure like this:

|-- src
| |-- subdir-a
| | |-- source-file-a.ts
| | |-- source-file-b.ts
| |-- subdir-b
| | |-- source-file-a.ts
| | |-- source-file-b.ts

You can add an 'index' file to each subdirectory, each in turn containing references to source files in that subdirectory:

In this case, the entry file will only need to contain references to index files in each subdirectory.

This plugin typically 'demodularizes' the code in the output file automatically. All import statements are omitted from the output file by default, as well as export statements, e.g.:

export { foo as bar }

When a exporting a declaration, e.g.:

export class Foo { }

Only the export keyword is omitted.

There may be some cases when you wish to alter the source emitted to the output file, perhaps if you intend to publish ES6 modules as well as an ES3 compatible library. This can be accomplished using the @tslink:startOmit, @tslink:endOmit, and @tslink:emit directives:

source-file.ts

import { foo } from "foo.ts";
// @tslink:startOmit

// all of the code between the 
//     @tslink:startOmit and @tslink:endOmit 
// directives will be omitted from the output file

let thisLineWillBeOmitted = true,
    thisOneToo = true;
    
// @tslink:endOmit

let bar:any = thisWillNotBeOmitted(ofCourse);

// @tslink:emit let baz:any = thisWillBeIncludedUncommented(yep);

export class MyAwesomeClass { }
export { thisLineWillBeOmitted }

resulting-output.ts


let bar:any = thisWillNotBeOmitted(ofCourse);

let baz:any = thisWillBeIncludedUncommented(yep);

class MyAwesomeClass { }

Implementation

const gulp = require('gulp');
const tsLink = require('gulp-ts-link');

module.exports = function () {
    // Notice that the buffer option is set to false (using file stream).
    // By default, if input is stream, output is stream,
    //     and if input is buffer, output is buffer.
    // Making sure the output file contents stream is highly recommended,
    //     especially if you anticipate a large output file.
    return gulp.src('./src/index.tslink.ts', {buffer: false})
        .pipe(tsLink())
        .pipe(gulp.dest('./src/temp'));
};

By default, the output file name is the same as the input file name. If you want to specify the name of the output file, you can pass it in:

const gulp = require('gulp');
const tsLink = require('gulp-ts-link');

module.exports = function () {
    return gulp.src('./src/index.tslink.ts', {buffer: false})
        .pipe(tsLink('my-output-file.ts'))
        .pipe(gulp.dest('./src/temp'));
};

Pass in an options map if you wish to modify the default behavior of the plugin:

const gulp = require('gulp');
const tsLink = require('gulp-ts-link');

module.exports = function () {
    return gulp.src('./src/index.tslink.ts', {buffer: false})
        .pipe(tsLink({ outFile: 'my-output-file.ts', outputAs: 'stream' }))
        .pipe(gulp.dest('./src/temp'));
};

Options

The name of the output file produced by this plugin. Same as the name of the input file by default.

The output file content type. Acceptable values are:

  • input: Output file content type will match in the input file content type (default)
  • buffer: Output file content is a buffer
  • stream: Output file content is a stream

Any other values given will be ignored, and the default value will be used.

The newline character sequence to use when creating the output file. The default is \r\n.

When true, TypeScript import declarations are not omitted from the output file. The default is false.

When true, TypeScript export statements are not omitted from the output file. The default is false. Note that this setting has no effect on how declaration exports, such as export const foo = 1024, are handled. In the latter case, the export keyword is omiited from the output file.