Why isn't Webpack excluding a folder I specified?

匿名 (未验证) 提交于 2019-12-03 02:56:01

问题:

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()     ] }; 

回答1:

Have you tried excluding the folder in your tsconfig.json?

{   "compilerOptions": {     "target": "es5",     "module": "commonjs",     ...   },   "exclude": [     "src/server",     "node_modules"   ] } 


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!