aboutsummaryrefslogtreecommitdiff
path: root/node_modules/ts-loader/examples/webpack1
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2017-05-24 15:10:37 +0200
committerFlorian Dold <florian.dold@gmail.com>2017-05-24 15:11:17 +0200
commit7a3df06eb573d36142bd1a8e03c5ce8752d300b3 (patch)
tree70bfaea8884c374876f607774850a3a51c0cb381 /node_modules/ts-loader/examples/webpack1
parentaca1143cb9eed16cf37f04e475e4257418dd18ac (diff)
fix build issues and add typedoc
Diffstat (limited to 'node_modules/ts-loader/examples/webpack1')
-rw-r--r--node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/gulp/.eslintrc73
-rw-r--r--node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/gulp/clean.js29
-rw-r--r--node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/gulp/inject.js55
-rw-r--r--node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/gulp/staticFiles.js31
-rw-r--r--node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/gulp/tests.js45
-rw-r--r--node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/gulp/webpack.js98
-rw-r--r--node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/gulpFile.js66
-rw-r--r--node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/karma.conf.js66
-rw-r--r--node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/package.json83
-rw-r--r--node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/tsconfig.json22
-rw-r--r--node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/webpack.config.js43
11 files changed, 611 insertions, 0 deletions
diff --git a/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/gulp/.eslintrc b/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/gulp/.eslintrc
new file mode 100644
index 000000000..f7aa388ad
--- /dev/null
+++ b/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/gulp/.eslintrc
@@ -0,0 +1,73 @@
+{
+ "root": true,
+ "env": {
+ "commonjs": true,
+ },
+ "rules": {
+ "camelcase": 2,
+ "comma-spacing": 1,
+ "consistent-return": 2,
+ "curly": [ 2, "all" ],
+ "dot-notation": [
+ 2,
+ { "allowKeywords": true }
+ ],
+ "eol-last": 2,
+ "eqeqeq": 2,
+ "keyword-spacing": 2,
+ "new-cap": 2,
+ "new-parens": 2,
+ "no-alert": 2,
+ "no-array-constructor": 2,
+ "no-caller": 2,
+ "no-catch-shadow": 2,
+ "no-eval": 2,
+ "no-extend-native": 2,
+ "no-extra-bind": 2,
+ "no-extra-parens": [ 2, "functions" ],
+ "no-implied-eval": 2,
+ "no-iterator": 2,
+ "no-labels": 2,
+ "no-label-var": 2,
+ "no-lone-blocks": 2,
+ "no-loop-func": 2,
+ "no-multi-str": 2,
+ "no-native-reassign": 2,
+ "no-new": 2,
+ "no-new-func": 2,
+ "no-new-object": 2,
+ "no-new-wrappers": 2,
+ "no-octal-escape": 2,
+ "no-proto": 2,
+ "no-return-assign": 2,
+ "no-script-url": 2,
+ "no-sequences": 2,
+ "no-shadow": 2,
+ "no-shadow-restricted-names": 2,
+ "no-spaced-func": 2,
+ "no-trailing-spaces": 1,
+ "no-undef-init": 2,
+ "no-unused-expressions": 2,
+ "no-use-before-define": [ 2, "nofunc" ],
+ "no-with": 2,
+ "quotes": [ 1, "single" ],
+ "semi": 2,
+ "semi-spacing": [
+ 2,
+ {
+ "before": false,
+ "after": true
+ }
+ ],
+ "space-infix-ops": 2,
+ "space-unary-ops": [
+ 2,
+ {
+ "words": true,
+ "nonwords": false
+ }
+ ],
+ "strict": [ 2, "global" ],
+ "yoda": [ 2, "never" ]
+ }
+}
diff --git a/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/gulp/clean.js b/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/gulp/clean.js
new file mode 100644
index 000000000..c51b4e416
--- /dev/null
+++ b/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/gulp/clean.js
@@ -0,0 +1,29 @@
+'use strict';
+
+var del = require('del');
+var gutil = require('gulp-util');
+var fs = require('fs');
+
+function run(done) {
+ fs.stat('./dist', function(err){
+ if (err) {
+ // Never existed
+ done();
+ }
+ else {
+ del(['./dist'], { force: true })
+ .then(function(paths) {
+ gutil.log('Deleted files/folders:\n', paths.join('\n'));
+ done();
+ })
+ .catch(function(error) {
+ gutil.log('Problem deleting:\n', error);
+ done();
+ });
+ }
+ });
+}
+
+module.exports = {
+ run: function(done) { return run(done); }
+};
diff --git a/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/gulp/inject.js b/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/gulp/inject.js
new file mode 100644
index 000000000..e4133e565
--- /dev/null
+++ b/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/gulp/inject.js
@@ -0,0 +1,55 @@
+'use strict';
+
+var gulp = require('gulp');
+var inject = require('gulp-inject');
+var glob = require('glob');
+
+function injectIndex(options) {
+ function run() {
+ var target = gulp.src('./src/index.html');
+ var sources = gulp.src([
+ //'./dist/styles/main*.css',
+ './dist/scripts/vendor*.js',
+ './dist/scripts/main*.js'
+ ], { read: false });
+
+ return target
+ .pipe(inject(sources, { ignorePath: '/dist/', addRootSlash: false, removeTags: true }))
+ .pipe(gulp.dest('./dist'));
+ }
+
+ var jsCssGlob = 'dist/**/*.{js,css}';
+
+ function checkForInitialFilesThenRun() {
+ glob(jsCssGlob, function (er, files) {
+ var filesWeNeed = ['dist/scripts/main', 'dist/scripts/vendor'/*, 'dist/styles/main'*/];
+
+ function fileIsPresent(fileWeNeed) {
+ return files.some(function(file) {
+ return file.indexOf(fileWeNeed) !== -1;
+ });
+ }
+
+ if (filesWeNeed.every(fileIsPresent)) {
+ run('initial build');
+ } else {
+ checkForInitialFilesThenRun();
+ }
+ });
+ }
+
+ checkForInitialFilesThenRun();
+
+ if (options.shouldWatch) {
+ gulp.watch(jsCssGlob, function(evt) {
+ if (evt.path && evt.type === 'changed') {
+ run(evt.path);
+ }
+ });
+ }
+}
+
+module.exports = {
+ build: function() { return injectIndex({ shouldWatch: false }); },
+ watch: function() { return injectIndex({ shouldWatch: true }); }
+};
diff --git a/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/gulp/staticFiles.js b/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/gulp/staticFiles.js
new file mode 100644
index 000000000..20327f272
--- /dev/null
+++ b/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/gulp/staticFiles.js
@@ -0,0 +1,31 @@
+'use strict';
+
+var gulp = require('gulp');
+var cache = require('gulp-cached');
+
+var targets = [
+ { description: 'INDEX', src: './src/index.html', dest: './dist' }
+];
+
+function copy(options) {
+ function run(target) {
+ gulp.src(target.src)
+ .pipe(cache(target.description))
+ .pipe(gulp.dest(target.dest));
+ }
+
+ function watch(target) {
+ gulp.watch(target.src, function() { run(target); });
+ }
+
+ targets.forEach(run);
+
+ if (options.shouldWatch) {
+ targets.forEach(watch);
+ }
+}
+
+module.exports = {
+ build: function() { return copy({ shouldWatch: false }); },
+ watch: function() { return copy({ shouldWatch: true }); }
+};
diff --git a/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/gulp/tests.js b/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/gulp/tests.js
new file mode 100644
index 000000000..05af0a551
--- /dev/null
+++ b/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/gulp/tests.js
@@ -0,0 +1,45 @@
+'use strict';
+
+var Server = require('karma').Server;
+var path = require('path');
+var gutil = require('gulp-util');
+
+function runTests(options) {
+ // Documentation: https://karma-runner.github.io/0.13/dev/public-api.html
+ var karmaConfig = {
+ configFile: path.join(__dirname, '../karma.conf.js'),
+ singleRun: !options.shouldWatch,
+
+ plugins: ['karma-webpack', 'karma-jasmine', 'karma-mocha-reporter', 'karma-sourcemap-loader', 'karma-phantomjs-launcher'],
+ reporters: ['mocha']
+ };
+
+ if (options.done) {
+ karmaConfig.plugins.push('karma-junit-reporter');
+ karmaConfig.reporters.push('junit');
+ } else {
+ karmaConfig.plugins.push('karma-notify-reporter');
+ karmaConfig.reporters.push('notify');
+ }
+
+ new Server(karmaConfig, karmaCompleted).start();
+
+ function karmaCompleted(exitCode) {
+ if (options.done) {
+ if (exitCode === 1) {
+ gutil.log('Karma: tests failed with code ' + exitCode);
+ } else {
+ gutil.log('Karma completed!');
+ }
+ options.done();
+ }
+ else {
+ process.exit(exitCode);
+ }
+ }
+}
+
+module.exports = {
+ run: function(done) { return runTests({ shouldWatch: false, done: done }); },
+ watch: function() { return runTests({ shouldWatch: true }); }
+};
diff --git a/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/gulp/webpack.js b/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/gulp/webpack.js
new file mode 100644
index 000000000..b0de5c558
--- /dev/null
+++ b/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/gulp/webpack.js
@@ -0,0 +1,98 @@
+'use strict';
+
+var gulp = require('gulp');
+var gutil = require('gulp-util');
+var webpack = require('webpack');
+var WebpackNotifierPlugin = require('webpack-notifier');
+var failPlugin = require('webpack-fail-plugin');
+var webpackConfig = require('../webpack.config.js');
+var packageJson = require('../package.json');
+
+function buildProduction(done) {
+ // modify some webpack config options
+ var myProdConfig = Object.create(webpackConfig);
+ myProdConfig.output.filename = '[name].[hash].js';
+
+ myProdConfig.plugins = myProdConfig.plugins.concat(
+ new webpack.DefinePlugin({
+ 'process.env': {
+ 'NODE_ENV': JSON.stringify('production')
+ }
+ }),
+ new webpack.optimize.CommonsChunkPlugin({ name: 'vendor', filename: 'vendor.[hash].js' }),
+ new webpack.optimize.DedupePlugin(),
+ new webpack.optimize.UglifyJsPlugin(),
+ failPlugin
+ );
+
+ // run webpack
+ webpack(myProdConfig, function (err, stats) {
+ if (err) { throw new gutil.PluginError('webpack:build', err); }
+ gutil.log('[webpack:build]', stats.toString({
+ colors: true
+ }));
+
+ if (done) { done(); }
+ });
+}
+
+function createDevCompiler() {
+ // modify some webpack config options
+ var myDevConfig = Object.create(webpackConfig);
+ myDevConfig.devtool = 'inline-source-map';
+ myDevConfig.debug = true;
+
+ myDevConfig.plugins = myDevConfig.plugins.concat(
+ new webpack.optimize.CommonsChunkPlugin({ name: 'vendor', filename: 'vendor.js' }),
+ new WebpackNotifierPlugin({ title: 'Webpack build', excludeWarnings: true })
+ );
+
+ // create a single instance of the compiler to allow caching
+ return webpack(myDevConfig);
+}
+
+function build() {
+ return new Promise(function (resolve, reject) {
+ buildProduction(function (err) {
+ if (err) {
+ reject(err);
+ } else {
+ resolve('webpack built');
+ }
+ });
+ });
+}
+
+function watch() {
+ var firstBuildDone = false;
+
+ return new Promise(function (resolve, reject) {
+ var devCompiler = createDevCompiler();
+ devCompiler.watch({ // watch options:
+ aggregateTimeout: 300 // wait so long for more changes
+ }, function (err, stats) {
+ if (err) {
+ if (!firstBuildDone) {
+ firstBuildDone = true;
+ reject(err);
+ }
+ throw new gutil.PluginError('webpack:build-dev', err);
+ } else {
+ if (!firstBuildDone) {
+ firstBuildDone = true;
+ resolve('webpack built');
+ }
+ }
+
+ gutil.log('[webpack:build-dev]', stats.toString({
+ chunks: false,
+ colors: true
+ }));
+ });
+ });
+}
+
+module.exports = {
+ build: function () { return build(); },
+ watch: function () { return watch(); }
+};
diff --git a/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/gulpFile.js b/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/gulpFile.js
new file mode 100644
index 000000000..b7b3abe73
--- /dev/null
+++ b/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/gulpFile.js
@@ -0,0 +1,66 @@
+/* eslint-disable no-var, strict, prefer-arrow-callback */
+'use strict';
+
+var gulp = require('gulp');
+var gutil = require('gulp-util');
+var eslint = require('gulp-eslint');
+var webpack = require('./gulp/webpack');
+var staticFiles = require('./gulp/staticFiles');
+var tests = require('./gulp/tests');
+var clean = require('./gulp/clean');
+var inject = require('./gulp/inject');
+
+var lintSrcs = ['./gulp/**/*.js'];
+
+gulp.task('delete-dist', function (done) {
+ clean.run(done);
+});
+
+gulp.task('build-process.env.NODE_ENV', function () {
+ process.env.NODE_ENV = 'production';
+});
+
+gulp.task('build-js', ['delete-dist', 'build-process.env.NODE_ENV'], function(done) {
+ webpack.build().then(function() { done(); });
+});
+
+gulp.task('build-other', ['delete-dist', 'build-process.env.NODE_ENV'], function() {
+ staticFiles.build();
+});
+
+gulp.task('build', ['build-js', 'build-other', 'lint'], function () {
+ inject.build();
+});
+
+gulp.task('lint', function () {
+ return gulp.src(lintSrcs)
+ .pipe(eslint())
+ .pipe(eslint.format());
+});
+
+gulp.task('watch', ['delete-dist'], function(done) {
+ process.env.NODE_ENV = 'development';
+ Promise.all([
+ webpack.watch()//,
+ //less.watch()
+ ]).then(function() {
+ gutil.log('Now that initial assets (js and css) are generated inject will start...');
+ inject.watch();
+ done();
+ }).catch(function(error) {
+ gutil.log('Problem generating initial assets (js and css)', error);
+ });
+
+ gulp.watch(lintSrcs, ['lint']);
+ staticFiles.watch();
+ tests.watch();
+});
+
+gulp.task('watch-and-serve', ['watch'], function() {
+ // local as not required for build
+ var express = require('express')
+ var app = express()
+
+ app.use(express.static('dist', {'index': 'index.html'}))
+ app.listen(8080);
+});
diff --git a/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/karma.conf.js b/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/karma.conf.js
new file mode 100644
index 000000000..72579927f
--- /dev/null
+++ b/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/karma.conf.js
@@ -0,0 +1,66 @@
+/* eslint-disable no-var, strict */
+'use strict';
+
+var webpackConfig = require('./webpack.config.js');
+
+module.exports = function(config) {
+ // Documentation: https://karma-runner.github.io/0.13/config/configuration-file.html
+ config.set({
+ browsers: [ 'PhantomJS' ],
+
+ files: [
+ // This ensures we have the es6 shims in place from babel and that angular and angular-mocks are loaded
+ // and then loads all the tests
+ 'test/main.js'
+ ],
+
+ port: 9876,
+
+ frameworks: [ 'jasmine' ],
+
+ logLevel: config.LOG_INFO, //config.LOG_DEBUG
+
+ preprocessors: {
+ 'test/main.js': [ 'webpack', 'sourcemap' ]
+ },
+
+ webpack: {
+ devtool: 'inline-source-map',
+ debug: true,
+ module: webpackConfig.module,
+ resolve: webpackConfig.resolve
+ },
+
+ webpackMiddleware: {
+ quiet: true,
+ stats: {
+ colors: true
+ }
+ },
+
+ // reporter options
+ mochaReporter: {
+ colors: {
+ success: 'bgGreen',
+ info: 'cyan',
+ warning: 'bgBlue',
+ error: 'bgRed'
+ }
+ },
+
+ // the default configuration
+ junitReporter: {
+ outputDir: 'test-results', // results will be saved as $outputDir/$browserName.xml
+ outputFile: undefined, // if included, results will be saved as $outputDir/$browserName/$outputFile
+ suite: ''
+ },
+
+ coverageReporter: {
+ reporters:[
+ //{type: 'html', dir:'coverage/'}, // https://github.com/karma-runner/karma-coverage/issues/123
+ {type: 'text'},
+ {type: 'text-summary'}
+ ],
+ }
+ });
+};
diff --git a/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/package.json b/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/package.json
new file mode 100644
index 000000000..131bb2911
--- /dev/null
+++ b/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/package.json
@@ -0,0 +1,83 @@
+{
+ "name": "es6-babel-react-flux-karma",
+ "version": "1.0.0",
+ "description": "ES6 + TypeScript + Babel + React + Karma: The Secret Recipe",
+ "main": "index.js",
+ "scripts": {
+ "test": "karma start --reporters mocha,junit --single-run --browsers PhantomJS",
+ "serve": "gulp watch-and-serve",
+ "watch": "gulp watch",
+ "build": "gulp build"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/microsoft/typescriptsamples.git"
+ },
+ "keywords": [
+ "React",
+ "Flux",
+ "ES2016",
+ "typescript"
+ ],
+ "author": "John Reilly",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/microsoft/typescriptsamples/issues"
+ },
+ "homepage": "https://github.com/Microsoft/TypeScriptSamples/tree/master/es6-babel-react-flux-karma#readme",
+ "devDependencies": {
+ "@types/fbemitter": "^2.0.32",
+ "@types/flux": "0.0.32",
+ "@types/jasmine": "^2.5.35",
+ "@types/react": "^0.14.41",
+ "@types/react-addons-test-utils": "^0.14.15",
+ "@types/react-bootstrap": "0.0.33",
+ "@types/react-dom": "^0.14.18",
+ "babel": "^6.0.0",
+ "babel-core": "^6.0.0",
+ "babel-loader": "^6.0.0",
+ "babel-preset-es2015": "^6.0.0",
+ "babel-preset-es2016": "^6.16.0",
+ "babel-preset-react": "^6.0.0",
+ "del": "^2.0.2",
+ "eslint": "^2.0.0",
+ "express": "^4.13.3",
+ "glob": "^7.0.0",
+ "gulp": "^3.9.0",
+ "gulp-autoprefixer": "^3.1.0",
+ "gulp-cached": "^1.1.0",
+ "gulp-cssmin": "^0.1.7",
+ "gulp-eslint": "^2.0.0",
+ "gulp-if": "^2.0.0",
+ "gulp-inject": "^3.0.0",
+ "gulp-notify": "^2.2.0",
+ "gulp-sourcemaps": "^1.5.2",
+ "gulp-streamify": "1.0.2",
+ "gulp-uglify": "^1.2.0",
+ "gulp-util": "^3.0.6",
+ "jasmine-core": "^2.3.4",
+ "karma": "^1.2.0",
+ "karma-coverage": "^1.0.0",
+ "karma-jasmine": "^1.0.0",
+ "karma-junit-reporter": "^1.0.0",
+ "karma-mocha-reporter": "^2.0.0",
+ "karma-notify-reporter": "^1.0.0",
+ "karma-phantomjs-launcher": "^1.0.0",
+ "karma-sourcemap-loader": "^0.3.6",
+ "karma-webpack": "^1.7.0",
+ "phantomjs-prebuilt": "^2.1.4",
+ "ts-loader": "^1.3.3",
+ "typescript": "^2.1.4",
+ "webpack": "^1.12.2",
+ "webpack-fail-plugin": "^1.0.4",
+ "webpack-notifier": "^1.2.1"
+ },
+ "dependencies": {
+ "babel-polyfill": "^6.0.0",
+ "flux": "^2.0.3",
+ "fbemitter": "^2.0.2",
+ "react": "^15.4.1",
+ "react-addons-test-utils": "^15.4.1",
+ "react-dom": "^15.4.1"
+ }
+}
diff --git a/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/tsconfig.json b/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/tsconfig.json
new file mode 100644
index 000000000..c3a732c12
--- /dev/null
+++ b/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/tsconfig.json
@@ -0,0 +1,22 @@
+{
+ "compileOnSave": false,
+ "compilerOptions": {
+ "allowSyntheticDefaultImports": true,
+ "lib": [
+ "dom",
+ "es2015",
+ "es2016"
+ ],
+ "jsx": "preserve",
+ "target": "es2016",
+ "module": "es2015",
+ "moduleResolution": "node",
+ "noImplicitAny": true,
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
+ "removeComments": false,
+ "preserveConstEnums": true,
+ "sourceMap": true,
+ "skipLibCheck": true
+ }
+} \ No newline at end of file
diff --git a/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/webpack.config.js b/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/webpack.config.js
new file mode 100644
index 000000000..cc26b27b7
--- /dev/null
+++ b/node_modules/ts-loader/examples/webpack1/react-babel-karma-gulp/webpack.config.js
@@ -0,0 +1,43 @@
+/* eslint-disable no-var, strict, prefer-arrow-callback */
+'use strict';
+
+var path = require('path');
+
+module.exports = {
+ cache: true,
+ entry: {
+ main: './src/main.tsx',
+ vendor: [
+ 'babel-polyfill',
+ 'fbemitter',
+ 'flux',
+ 'react',
+ 'react-dom'
+ ]
+ },
+ output: {
+ path: path.resolve(__dirname, './dist/scripts'),
+ filename: '[name].js',
+ chunkFilename: '[chunkhash].js'
+ },
+ module: {
+ loaders: [{
+ test: /\.ts(x?)$/,
+ exclude: /node_modules/,
+ loader: 'babel-loader?presets[]=es2016&presets[]=es2015&presets[]=react!ts-loader'
+ }, {
+ test: /\.js$/,
+ exclude: /node_modules/,
+ loader: 'babel',
+ query: {
+ presets: ['es2016', 'es2015', 'react']
+ }
+ }]
+ },
+ plugins: [
+ ],
+ resolve: {
+ // Add `.ts` and `.tsx` as a resolvable extension.
+ extensions: ['.webpack.js', '.web.js', '.ts', '.tsx', '.js']
+ },
+};