Javascript 在没有索引的datatables扩展中查找索引的网页包

Javascript 在没有索引的datatables扩展中查找索引的网页包,javascript,node.js,webpack,datatables,Javascript,Node.js,Webpack,Datatables,我试图做的是使用数据表。我得到一个错误: ERROR in ./index.js Module not found: Error: Can't resolve 'datatables.net-dt' in path/src 当我尝试对数据表进行网页打包时,所有数据表都需要。我使用-display错误详细信息运行了webpack,发现问题在于它正在datatable目录中查找某种索引文件。e、 g Field 'browser' doesn't contain a valid alias con

我试图做的是使用数据表。我得到一个错误:

ERROR in ./index.js
Module not found: Error: Can't resolve 'datatables.net-dt' in path/src
当我尝试对数据表进行网页打包时,所有数据表都需要。我使用-display错误详细信息运行了webpack,发现问题在于它正在datatable目录中查找某种索引文件。e、 g

Field 'browser' doesn't contain a valid alias configuration
                      path/node_modules/datatables.net-colreorder-dt/index doesn't exist
                    .js
                      Field 'browser' doesn't contain a valid alias configuration
                      path/node_modules/datatables.net-colreorder-dt/index.js doesn't exist
                    .json
                      Field 'browser' doesn't contain a valid alias configuration
                      path/node_modules/datatables.net-colreorder-dt/index.json doesn't exist
我不明白它为什么要找索引。我已经遵循了我能在webpack和datatables上找到的所有文档,根据datatables下载部分,我应该只需要添加我已经完成的包,并添加require的部分,它应该可以工作

我已经查看了数据表及其扩展的repo,其中任何一个都没有索引。我已经用谷歌搜索了所有可能的方法,但找不到任何答案,所以我希望这里的人能有一个想法,因为我尝试了许多不同的方法,这些方法要么不起作用,要么产生了更多的错误

这是我的index.js

require('./index.html'); 
var AWS = require('aws-sdk');
require( 'datatables.net-dt' )();
require( 'datatables.net-buttons-dt' )();
require( 'datatables.net-buttons/js/buttons.print.js' )();
require( 'datatables.net-colreorder-dt' )();
require( 'datatables.net-fixedheader-dt' )();
require( 'datatables.net-rowgroup-dt' )();
在requires运行之后没有代码,所以我没有包含它

这是我的package.json

{
  "name": "TestCode",
  "version": "1.0.0",
  "description": "Test",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "webpack"
  },
  "keywords": [],
  "author": " ",
  "license": "ISC",
  "dependencies": {
    "aws-sdk": "^2.116.0",
    "datatables.net-buttons-dt": "^1.4.2",
    "datatables.net-colreorder-dt": "^1.4.1",
    "datatables.net-dt": "^1.10.16",
    "datatables.net-fixedheader-dt": "^3.1.3",
    "datatables.net-rowgroup-dt": "^1.0.2",
    "jquery": "^3.2.1",
    "raw-loader": "^0.5.1"
  },
  "devDependencies": {
    "html-webpack-plugin": "^2.30.1",
    "json-loader": "^0.5.7",
    "webpack": "^3.6.0",
    "webpack-dev-server": "^2.9.1"
  },
}
这是我的webpack.config.js

const path = require('path');
const webpack = require('webpack');
const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
  devtool: 'cheap-module-eval-source-map',
  context: path.resolve(__dirname, 'src'),
  entry: './index.js',
  output: {
    filename: 'bundle.js',
    path: path.resolve(__dirname, 'dist')
  },
  devServer: {
    contentBase: path.resolve(__dirname, 'src')
  },
  module: {
    loaders: [
      {
        test: /\.json$/,
        loaders: ['json']
      },
      {
        test: /\.html$/,
        loader: ['raw-loader']
      }
    ]
  },
  resolveLoader: {
    moduleExtensions: ['-loader'] 
  },
  plugins: [
    new webpack.HotModuleReplacementPlugin(),
    new HtmlWebpackPlugin({
      template: './index.html'
    })
  ]
};

首先,您的require语句不需要在末尾添加额外的内容。需要“模块”;很好

其次,您有一个扩展名为.js的语句。它不应该存在,因为您需要的是模块,而不是文件

最后,解决问题的方法是:webpack.config.js中缺少一个resolve字段。当您不使用resolve字段时,所有require语句都在指定的上下文文件夹中查找模块,在您的情况下,源src文件夹在未定义时默认为root文件夹

要解决此问题,请在webpack.config.js中添加以下内容:

或者无论您的节点模块位于何处

webpack查找索引的原因是它是默认的。它找不到您引用的模块,因此正在查找索引文件。在同一个导入中出现多个错误的原因是它正在查找多个扩展

扩展默认为扩展:[.js、.json]。这就是为什么在错误日志中会看到.js和.json。顺便说一句,这也是为什么您可以在require语句中省略扩展


如果您需要了解webpack的更多帮助,请随时询问,或者查看有关解析选项的文档,了解您可以解析模块的更多内容。

因此,我添加了一点配置,但它不起作用,因此我阅读了您链接并添加的文档:mainFiles:['package.json']这似乎是可行的,但现在我发现AWS SDK存在一个奇怪的问题,即未捕获的TypeError:util.crypto.lib.createHash不是SDK使用的实用程序库上的函数。如果你认为这是一个不相关的问题,我会将此标记为答案。我很确定我的修复没有实现任何效果,如果我删除数据表的requires和main文件,aws的东西就可以正常工作。啊,我的错。我应该检查一下你到底想要什么。事实是,datatables.net-dt是一个只包含样式的包,只包含css。Webpack不知道如何处理这些文件,因为它们不包含主文件或index.js。您可以通过分别要求主库和样式来解决问题:要求'datatables.net';需要'datatables.netdt/css/jquery.datatables.css'等等。那么我需要添加某种类型的css加载器吗?在他们的下载页面上,它显示了它的用途,我不明白为什么我这样做会如此错误,我肯定会有很多其他人以这种方式使用它?是的,你需要添加一个css加载器。使用npm install命令安装加载程序,并在模块{rules[{…}]}配置中使用{test:/\.css$/,loader:'style loader!css loader'}来使用它们。
resolve: {
    modules: [
        path.resolve('./node_modules')
    ]
}