Webpack不包括我们所有的js和jsx文件,甚至是那些在同一个目录下的文件

我们正在尝试升级使用WebPack构build的React.js应用程序。 在我们的升级中,我们正在从Webpack 1.0迁移到2.0,并且我已经对升级进行了“必要的”更改。 但是,当我查看包含的文件时,它正在构build和编译,它是以前包含的文件的一个非常小的规模。

例如,我们在React Flux Actions目录中有34个文件。 有些文件的.js扩展名是.jsx。 但是,在这34个文件中,只有1个出现在构build中。 另一个发生了什么事情33.这个扩展名是.js,但是那个目录下还有更多的.js文件。

我错过了什么?

这是我们的主要configuration文件。

var path = require('path'); var webpack = require('webpack'); var StringReplacePlugin = require("string-replace-webpack-plugin"); var Environment = require('./js/environment'); module.exports = { entry: [ './js' ], output: { path: path.join(__dirname, 'build'), filename: 'bundle.js', }, plugins: [ new StringReplacePlugin(), new webpack.LoaderOptionsPlugin({ options: { tslint: { emitErrors: true, failOnHint: true } } }) ], resolve: { extensions: ['*', '.js', '.jsx'], modules: [ path.join(__dirname, 'node_modules'), path.join(__dirname, 'js'), path.join(__dirname, 'jsx') ] }, module: { loaders: [{ test: /\.jsx?$/, exclude: /node_modules/, loaders: ['react-hot-loader/webpack', 'babel-loader' ] }, { test: /js\/constants.js$/, loader: StringReplacePlugin.replace({ replacements: [{ pattern: /localhost/g, replacement: Environment.getBackendURL }] }) }] } }; 

这是我们热的重新加载本地版本,我认为这两个文件被使用,上面这一个。 但是我现在只做“npm run build”命令,然后运行“npm run local”

 var path = require('path'); var webpack = require('webpack'); module.exports = { devtool: 'eval', entry: [ 'webpack-dev-server/client?http://localhost:3000', 'webpack/hot/only-dev-server', './js/index' ], output: { path: path.join(__dirname, 'build-hot'), filename: 'bundle.js', publicPath: '/build/' }, plugins: [ new webpack.HotModuleReplacementPlugin(), // new webpack.NoErrorsPlugin() new webpack.LoaderOptionsPlugin({ options: { tslint: { emitErrors: true, failOnHint: true } } }) ], resolve: { extensions: ['*', '.js', '.jsx'], modules: [ path.join(__dirname, 'node_modules'), path.join(__dirname, 'js'), path.join(__dirname, 'jsx') ] }, module: { loaders: [{ test: /\.jsx?$/, exclude: /node_modules/, loaders: ['react-hot-loader/webpack', 'babel-loader' ] }] } }; 

基于迈克尔的回答,有一个我发现是不同的,感觉可能是这个原因,但是我没有看到Webpack2中的任何预装载器。 就这个。

 preLoaders: [ { test: /\.jsx?$/, loader: "source-map-loader" } ], 

Webpack开始查看您的入口点,并且只包含正在导入的文件,而不仅仅包括项目中的每个文件(如概念 -正式文档的input中所述)。

当你的入口点是./js ,它将以./js/index.js开始(这就是Node.js,因此webpack会把Folder 作为模块导入),所以你不会在每个文件都包含在这个目录中。 如果您不在./js/index.js或其依赖项中导入它们,那么文件将不会被包含在内。 据推测,你不这样做,这就是为什么只有这一个文件被包含在捆绑。

这种行为从webpack 1到webpack 2并没有改变。令人惊讶的是它与webpack 1的工作方式不同,但也许你在迁移过程中改变了一些你不知道的东西。