I keep my server & client code in the same repository, though I use Webpack to build only the client:
My project builds fine if I delete the src/server folder. But when it's there I get all these Webpack Typescript duplicate definition errors like:
[1m[31mERROR in /home/rje/projects/ekaya/typings/main/ambient/react-dom/index.d.ts (70,5): error TS2300: Duplicate identifier 'export='.
which are caused by Webpack trying to build one of the files in my server folder that contains:
/// <reference path="../../../../typings/main.d.ts" />
How can I get Webpack to completely ignore the server folder?
I've tried in my webpack.config.js:
var rootPath = __dirname; var srcPath = path.join(rootPath, 'src/client'); var distPath = path.join(rootPath, 'dist/client'); var serverPath = path.join(rootPath, 'src/serve ... loaders: [ {test: /\.js$/, loader: 'babel-loader?cacheDirectory', include: [srcPath], exclude: [serverPath]}, {test: /\.jsx$/, loader: 'babel-loader?cacheDirectory', include: [srcPath], exclude: [serverPath] }, {test: /\.ts$/, loader: 'ts-loader?cacheDirectory', include: [srcPath], exclude: [serverPath] }, {test: /\.tsx$/, loader: 'ts-loader?cacheDirectory', include: [srcPath], exclude: [serverPath] },
Here's the full webpack config if it helps:
//https://webpack.github.io/docs/configuration.html var webpack = require('webpack'); var HtmlWebpackPlugin = require('html-webpack-plugin'); var CopyWebpackPlugin = require('copy-webpack-plugin'); var path = require('path'); var rootPath = __dirname; // e.g. ~/projects/ekaya var srcPath = path.join(rootPath, 'src/client'); var distPath = path.join(rootPath, 'dist/client'); var serverPath = path.join(rootPath, 'src/server'); module.exports = { bail: true, cache: false, context: rootPath, debug: true, devtool: 'source-map', //inline-source-map, https://webpack.github.io/docs/configuration.html#devtool target: 'web', //node, web devServer: { contentBase: distPath, historyApiFallback: true, outputPath: path.join(distPath, 'devServer') }, entry: { app: path.join(srcPath, 'app/home.jsx'), lib: ['react', 'react-router', 'react-dom', 'jquery', 'lodash', 'history'] }, output: { path: distPath, publicPath: '', filename: '[name].js', pathInfo: true }, resolve: { root: srcPath, extensions: ['', '.js', '.jsx', '.ts', '.tsx'], modulesDirectories: ['node_modules', srcPath, 'typings'] }, module: { loaders: [ {test: /\.js$/, loader: 'babel-loader?cacheDirectory', include: [srcPath], exclude: [serverPath]}, {test: /\.jsx$/, loader: 'babel-loader?cacheDirectory', include: [srcPath], exclude: [serverPath] }, {test: /\.ts$/, loader: 'ts-loader?cacheDirectory', include: [srcPath], exclude: [serverPath] }, {test: /\.tsx$/, loader: 'ts-loader?cacheDirectory', include: [srcPath], exclude: [serverPath] }, {test: /\.scss$/, loaders: ['style', 'css', 'sass']}, {test: /\.png$/, loader: 'file-loader'}, {test: /\.jpg$/, loader: 'file-loader'}, {test: /\.jpeg$/, loader: 'file-loader'}, {test: /\.svg(\?v=\d+\.\d+\.\d+)?$/, loader: 'file-loader?mimetype=image/svg+xml'}, {test: /\.woff(\?v=\d+\.\d+\.\d+)?$/, loader: "file-loader?mimetype=application/font-woff"}, {test: /\.woff2(\?v=\d+\.\d+\.\d+)?$/, loader: "file-loader?mimetype=application/font-woff"}, {test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/, loader: "file-loader?mimetype=application/octet-stream"}, {test: /\.eot(\?v=\d+\.\d+\.\d+)?$/, loader: "file-loader"} ] }, plugins: [ new CopyWebpackPlugin ([ { from: path.join(srcPath, 'images'), to: 'images' } ]), new webpack.optimize.CommonsChunkPlugin('lib', 'lib.js'), new HtmlWebpackPlugin ({ inject: true, template: path.join(srcPath, 'index.html') }), new webpack.NoErrorsPlugin() ] };