javascript – 如何配置Webpack dev服务器以在通过其他服务器运行其余站点时为特定文件夹提供服务?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 如何配置Webpack dev服务器以在通过其他服务器运行其余站点时为特定文件夹提供服务?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5414字,纯文字阅读大概需要8分钟。
内容图文
![javascript – 如何配置Webpack dev服务器以在通过其他服务器运行其余站点时为特定文件夹提供服务?](/upload/InfoBanner/zyjiaocheng/774/e136741830b947b8ab7655c572e0547a.jpg)
一些快速背景:
我公司的网站运行CMS,CMS处理所有路由.没有html文件,只有剃刀文件(.cshtml).虽然从头开始重做网站是我更喜欢做的,但它不是一个选项,所以我试图通过逐页整合vue.js与webpack开发工作流程来逐步实现网站的现代化.基础.
我花了很多时间设置webpack,只允许它处理在/ dist /文件夹中找到的文件 – 其他一切都通过http://my.server/提供,并由CMS和后端处理.
通过试用和错误我设法在/ dist /文件夹中获取webpack-dev-server服务文件,同时允许服务器的其余部分提供其他所有服务(通过http://my.server/).不幸的是,只有当webpack-dev-server部分的文件路径具体引用“http://localhost:8080/”时,这才有效,这显然是不可接受的.
开发环境代码必须与生产环境代码完全相同,因此< script src =“http:// localhost:8080 / dist / build.js”>< / script>简直是不可接受的.
但是,如果我只是写< script src =“/ dist / build.js”>< / script>服务器将此解析为< script src =“http://my.server/dist/build.js”>< / script>这显然是不正确的,并导致404(因为这些文件仅从开发服务器提供).
我的问题是,“我如何配置webpack-dev-server来自己提供/ dist /文件夹中的所有内容,同时允许网站上的其他内容通过”http://my.server“提供?
这是我的webpack.config.js文件供参考:
var path = require('path')
var webpack = require('webpack')
module.exports = {
entry: './src/main.js',
output: {
path: path.resolve(__dirname, './dist'),
publicPath: '/dist/',
filename: 'build.js'
},
module: {
rules: [
{
test: /\.vue$/,
loader: 'vue-loader',
options: {
loaders: {
// Since sass-loader (weirdly) has SCSS as its default parse mode, we map
// the "scss" and "sass" values for the lang attribute to the right configs here.
// other preprocessors should work out of the box, no loader config like this nessessary.
'scss': 'vue-style-loader!css-loader!sass-loader',
'sass': 'vue-style-loader!css-loader!sass-loader?indentedSyntax'
}
// other vue-loader options go here
}
},
{
test: /\.js$/,
loader: 'babel-loader',
exclude: /node_modules/
},
{
test: /\.(png|jpg|gif|svg)$/,
loader: 'file-loader',
options: {
name: '[name].[ext]?[hash]'
}
}
]
},
resolve: {
alias: {
'vue$': 'vue/dist/vue.common.js'
}
},
devServer: {
publicPath: '/dist/',
historyApiFallback: true,
noInfo: false,
proxy: [{
context: function(pathname, req) {
// exclude /src/ and /dist/
return !pathname.match("^/(src|dist)/");
},
target: {
"host": "my.server",
"protocol": 'http:',
"port": 80
},
ignorePath: false,
changeOrigin: true,
secure: false
}]
},
performance: {
hints: false
},
devtool: '#eval-source-map'
}
if (process.env.NODE_ENV === 'production') {
module.exports.devtool = '#source-map'
// http://vue-loader.vuejs.org/en/workflow/production.html
module.exports.plugins = (module.exports.plugins || []).concat([
new webpack.DefinePlugin({
'process.env': {
NODE_ENV: '"production"'
}
}),
new webpack.optimize.UglifyJsPlugin({
sourceMap: true,
compress: {
warnings: false
}
}),
new webpack.LoaderOptionsPlugin({
minimize: true
})
])
}
虽然可能没有必要回答这个问题,但如果您想要更多背景知识,我的初始问题(以及该问题的解决方案)就在这里:Using a simple vue.js/webpack setup, how does one configure the dev server to proxy everything EXCEPT a few .js and .vue files?
解决方法:
我主要使用.NET应用程序.它仍然提供来自localhost:8080的开发文件,但在开发期间负责为您修改模板文件并将其调整回生产.不确定它是否会完全解决你的问题,但这对我们有用,现在可以帮助别人,所以无论如何我都会留在这里.
在package.json中我有一个start(dev)和build(prod)脚本:
"start": "webpack --config webpack.dev.js && webpack-dev-server --config webpack.dev.js",
"build": "webpack --config webpack.prod.js"
webpack.prod.js只是设置模式:“生产”并与webpack.config.js合并,后者执行大部分webpack工作,包括将文件注入.net _Layout_React.cshtml文件,包括Scripts文件夹中的制作脚本:
const HtmlWebPackPlugin = require('html-webpack-plugin');
const webpack = require('webpack');
const path = require('path');
module.exports = {
entry: {
main: './src/index.js',
},
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
},
},
{
test: /\.html$/,
use: [
{
loader: 'html-loader',
},
],
},
{
test: /\.scss$/,
use: [
'style-loader', // creates style nodes from JS strings
'css-loader', // translates CSS into CommonJS
'sass-loader', // compiles Sass to CSS, using Node Sass by default
],
},
],
},
plugins: [
new HtmlWebPackPlugin({
template: '../../../Views/Shared/_Layout_Template.cshtml',
filename: '../../Views/Shared/_Layout_React.cshtml',
}),
new webpack.HashedModuleIdsPlugin(),
],
output: {
path: path.resolve(__dirname, '../../../Scripts/React/'),
publicPath: '/Scripts/React/',
filename: '[name].[contenthash].production.js',
},
optimization: {
runtimeChunk: 'single',
splitChunks: {
cacheGroups: {
vendor: {
test: /[\\/]node_modules[\\/]/,
name: 'vendor',
chunks: 'all',
},
},
},
},
};
当我运行npm run build时,这将构建生产_Layout_React.cshtml模板,该模板在应用程序中使用并包含来自文件系统的文件.但是,当我运行npm start时,它会更改_Layout_React.cshtml模板以包含来自localhost:8080的文件,这是webpack-dev-server运行的地方,并提供来自以下内容的监视文件:
webpack.dev.js:
const merge = require('webpack-merge');
const HtmlWebPackPlugin = require("html-webpack-plugin");
const webpack = require('webpack');
const baseConfig = require('./webpack.config.js');
module.exports = merge(baseConfig, {
mode: "development",
devtool: 'eval-source-map',
devServer: {
open: false,
},
output: {
filename: '[name].development.js',
publicPath: 'http://localhost:8080/dist/',
},
});
现在,当我运行npm start然后运行.NET应用程序时,我在localhost上获得.NET应用程序:33401但它从localhost获取它的反应文件:8080并在保存时自动编译它们,当它需要时间推送到repo我运行npm运行构建,它将文件构建到.NET Scripts文件夹中的硬文件中,并更新模板以反映这一点.
内容总结
以上是互联网集市为您收集整理的javascript – 如何配置Webpack dev服务器以在通过其他服务器运行其余站点时为特定文件夹提供服务?全部内容,希望文章能够帮你解决javascript – 如何配置Webpack dev服务器以在通过其他服务器运行其余站点时为特定文件夹提供服务?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。