2017-08-11 102 views
1

我知道使用webpack和webpack-dev-server构建的区别在于后者输出和服务于内存,而前者将输出创建为磁盘并且不会启动快递服务。加载webpack-dev-server的问题加载

我的问题是,我的webpack配置工作正常,如果我通过webpack运行它,然后运行webpack-dev-server,但后者看着它,当发生更改时,它们不会反映在输出中因为它应该只影响内存中的内容)。但是,如果我删除了磁盘上的构建文件,并且不首先与webpack绑定,我无法使webpack-dev-server加载Angular应用程序(页面空白并显示“无法获取/”)。

半工作方法

此作品(但并不理想,因为我建立这一切两次):

  • 创建指定的输出和devserver选项的WebPack配置。
  • 运行npm命令“npm run webpack -- --config appConfigs/webpack.dev.js --progress --profile && npm run webpack-dev-server -- --config appConfigs/webpack.dev.js --open --progress --profile --inline
  • 它建立到输出目录,然后webpack-dev-server启动这些文件,它运行顺畅。

仅使用的WebPack-DEV-服务器

这看起来不正确。 webpack-dev-server的全部重点是从内存中提供服务,所以它根本不需要从输出文件读取数据。如果我按照以下步骤进行操作,则不起作用:

  • 删除以前生成的输出文件夹。
  • 运行故宫命令“npm run webpack-dev-server -- --config appConfigs/webpack.dev.js --open --progress --profile --inline
  • 当浏览器加载起来,用错误招呼“无法GET /”

这里是的WebPack-dev的服务器输出与问候到内容位于: 项目运行在http://localhost:9000/ 的WebPack输出从/ 内容不从的WebPack是由C送达:\某某\ DIST

所以,我希望,当它加载了,它会找到的index.html在http://localhost:9000,但我取而代之的是“无法GET /”。

现在,另一个SO帖子指出,由于没有编写任何文件,我需要使用像HtmlWebpackPlugin这样的插件来确保它已正确创建并可用于webpack,但似乎没有解决问题。

webpack.dev.config内容

这里是我的webpack.dev.config(注意这个文件工作正常,如果我的WebPack通常捆绑,如果我用的WebPack捆绑提供精美,然后运行的WebPack-dev亡服务器)。

const webpack = require('webpack'); 
const helpers = require('./helpers'); 

const DefinePlugin = require('webpack/lib/DefinePlugin'); 
const HtmlWebpackPlugin = require('html-webpack-plugin'); 
const ExtractTextPlugin = require('extract-text-webpack-plugin'); 
const LoaderOptionsPlugin = require('webpack/lib/LoaderOptionsPlugin'); 

/** 
* Webpack constants 
*/ 
const ENV = process.env.ENV = process.env.NODE_END = 'development'; 
const HOST = 'localhost'; 
const PORT = 3000; 
const PUBLIC = process.env.PUBLIC || undefined; 
const HMR = helpers.hasProcessFlag('hot'); 
const METADATA = { 
    host: HOST, 
    port: PORT, 
    public: PUBLIC, 
    ENV: ENV, 
    HMR: HMR 
}; 

module.exports = { 
    devtool: 'cheap-module-source-map', 

    performance: { 
     hints: false 
    }, 

    entry: { 
     'polyfills': helpers.root('src', 'polyfills.browser.ts'), 
     'app': helpers.root('src', 'main.browser.ts') 
    }, 

    output: { 
     path: helpers.root('dist'), 
     filename: 'js/[name].bundle.js', 
     chunkFilename: 'js/[id].chunk.js', 
     sourceMapFilename: '[file].map', 
     publicPath: '/' 
    }, 

    devServer: { 
     historyApiFallback: true, 
     contentBase: helpers.root('dist'), 
     port: 9000 
    }, 

    resolve: { 
     extensions: ['.ts', '.js', '.json', '.css', '.scss', '.html'] 
    }, 

    module: { 
     rules: [ 
      { 
       test: /\.ts$/, 
       use: [ 
         { 
          loader: 'awesome-typescript-loader', 
          options: { 
           configFileName: 'tsconfig.webpack.json' 
          } 
         }, 
         'angular-router-loader', 
         'angular2-template-loader', 
         { 
          loader: 'tslint-loader', 
          options: { 
           conigFile: 'tslint.json' 
          } 
         }, 
         'source-map-loader' 
       ], 
       exclude: [/\.(spec|e2e)\.ts$/] 
      }, 
      { 
       test: /\.(png|jpg|gif|woff|woff2|ttf|svg|eot)$/, 
       loader: 'file-loader?name=assets/[name]-[hash:6].[ext]' 
      }, 
      { 
       test: /\.json$/, 
       loader: 'json-loader' 
      }, 
      { 
       test: /favicon.ico$/, 
       loader: 'file-loader?name=/[name].[ext]' 
      }, 
      { 
       test: /\.scss$/, 
       loaders: ["style-loader", "css-loader", "sass-loader"] 
      }, 
      { 
       test: /\.html$/, 
       loader: ['html-loader'], 
      } 
     ], 
     exprContextCritical: false 
    }, 
    plugins: [ 
     new DefinePlugin({ 
      'ENV': JSON.stringify(METADATA.ENV), 
      'HMR': METADATA.HMR, //unused here 
      'process.env': { 
       'ENV': JSON.stringify(METADATA.ENV), 
       'NODE_ENV': JSON.stringify(METADATA.ENV), 
       'HMR': METADATA.HMR //unused here 
      } 
     }), 
     new LoaderOptionsPlugin({ 
      debug: true, 
      options: { 
      } 
     }), 
     new webpack.ContextReplacementPlugin(
      /angular(\\|\/)core(\\|\/)(esm(\\|\/)src|src)(\\|\/)linker/, 
      helpers.root('src'), 
      {} 
     ), 
     new webpack.optimize.CommonsChunkPlugin({ 
      name: ['app', 'polyfills'], 
      minChunks: Infinity 
     }), 
     new HtmlWebpackPlugin({ 
      inject: 'body', 
      template: './src/index.html' 
     }) 
    ] 
}; 

(部分)从的WebPack-DEV-服务器输出

有限公司为简洁

10% building modules 2/2 modules 0 active 
Project is running at http://localhost:9000/ 
webpack output is served from/
Content not from webpack is served from C:\xyz\dist 
404s will fallback to /index.html 
... 
Hash: 8ccd65a6efa15f3c1590 
Version: webpack 3.5.1 
Time: 29663ms 
        Asset  Size Chunks     Chunk Names 
      js/app.bundle.js 4.6 MB  0 [emitted] [big] app 
    js/polyfills.bundle.js 577 kB  1 [emitted] [big] polyfills 
     js/app.bundle.js.map 4.97 MB  0 [emitted]   app 
js/polyfills.bundle.js.map 691 kB  1 [emitted]   polyfills 
       index.html 1.14 kB   [emitted] 
[560] (webpack)-dev-server/client?http://localhost:9000 5.83 kB {1} [built] 
     [] -> factory:77ms building:65ms = 142ms 
[747] multi (webpack)-dev-server/client?http://localhost:9000 ./src/polyfills.browser.ts 40 bytes {1} [built] 
     factory:0ms building:3ms = 3ms 
[756] ./node_modules/loglevel/lib/loglevel.js 6.74 kB {1} [built] 
     [] -> factory:6700ms building:254ms = 6954ms 
[757] (webpack)-dev-server/client/socket.js 856 bytes {1} [built] 
     [] -> factory:34ms building:757ms = 791ms 
[789] (webpack)-dev-server/client/overlay.js 3.6 kB {1} [built] 
     [] -> factory:36ms building:743ms = 779ms 
[794] (webpack)/hot nonrecursive ^\.\/log$ 170 bytes {1} [built] 
     [] -> factory:31ms building:14ms = 45ms 
[796] (webpack)/hot/emitter.js 77 bytes {1} [built] 
     [] -> factory:6257ms building:24ms = 6281ms 
[798] ./src/polyfills.browser.ts 1.16 kB {1} [built] 
     [] -> factory:188ms building:6063ms = 6251ms 
[799] ./node_modules/core-js/es6/regexp.js 346 bytes {1} [built] 
     [] -> factory:551ms building:50ms = 601ms 
[806] ./node_modules/core-js/es6/map.js 208 bytes {1} [built] 
     [] -> factory:552ms building:55ms dependencies:4419ms = 5026ms 
[812] ./node_modules/core-js/es6/set.js 208 bytes {1} [built] 
     [] -> factory:552ms building:53ms dependencies:4416ms = 5021ms 
[813] ./node_modules/core-js/es6/weak-map.js 176 bytes {1} [built] 
     [] -> factory:553ms building:56ms dependencies:4415ms = 5024ms 
[864] multi (webpack)-dev-server/client?http://localhost:9000 ./src/main.browser.ts 40 bytes {0} [built] 
     factory:0ms building:2ms dependencies:78ms = 80ms 
[865] ./src/main.browser.ts 899 bytes {0} [built] 
     [] -> factory:452ms building:5896ms = 6348ms 
[1436] ./src/app/environment.ts 1.01 kB {0} [built] 
     [] -> factory:61ms building:106ms = 167ms 
    + 1422 hidden modules 
Child html-webpack-plugin for "index.html": 
    1 asset 
     [0] ./node_modules/html-webpack-plugin/lib/loader.js!./src/index.html 1.18 kB {0} [built] 
      factory:476ms building:5898ms = 6374ms 
webpack: Compiled successfully. 

所以,它看起来像它的工作原理,但我无法浏览到任何与得到“无法获取{无论我试图去}“

在此期间,我可以运行半工作方式,但它会捆绑它通过webpack,输出到目录,然后启动webpack-dev-serv呃来自该目录中的文件,这不像它应该做的那样(这需要两倍的时间,因为它捆绑了两次)。

我错过了什么?

回答

0

删除了node_modules,并重新安装了使用纱线的所有东西,它的工作方式与广告完全相同。不知道有什么不同,但没有进一步的问题。