使用 Webpack 构建简单网站

2024-01-01

我第一次尝试让 webpack 工作,并且是在一个简单的网站上进行的,但是无论我尝试什么,它都无法正常工作。我已经坚持了好几个星期了,我认真地尝试了每一条线索,但都无济于事。我只需要一个对 webpack 没有问题的人来查看我的代码并提供有关如何使其正常工作的评论。

我的所有源代码都在 src 目录中。库和开发人员依赖项位于 node_modules 目录中。我想运行 webpack 并将所有内容输出到 dist 目录。如果我仅使用 src 目录中的文件运行服务器,它工作正常,但一旦我运行 webpack 并尝试使用 dist 目录中的文件,它就会崩溃。

这是 webpack.config.js:

var webpack = require('webpack');
var path = require('path');

module.exports = {
context: __dirname + "\\src",
debug: true,
entry: "./index.webpack.js",
output: {
    path: __dirname + "\\dist",
    filename: "index.min.js"
},
module: {
    loaders: [
        {
            test:/\.js$/,
            exclude:/(node_modules)/,
            loader:'babel-loader',
            query: {
                presets:['es2015']
            }
        },
        {
            test:/\.css$/,
            exclude:/(node_modules)/,
            loader:'style-loader!css-loader'
        },
        {
            test:/\.less$/,
            exclude:/(node_modules)/,
            loader:'style-loader!css-loader!less-loader'
        },
        {
            test:/\.(png|woff|woff2|eot|ttf|svg)$/,
            exclude:/(node_modules)/,
            loader: 'url-loader?limit=100000'
        },
        {
            test:/\.(jpe?g|png|gif|svg)$/i,
            exclude:/(node_modules)/,
            loader: 'url?limit=10000!img?progressive=true'
        },
        {
            test:/\.html$/,
            exclude:/(node_modules)/,
            loader: 'html-loader'
        }
    ]
},
plugins: [
    new webpack.optimize.DedupePlugin(),
    new webpack.optimize.OccurenceOrderPlugin(),
    new webpack.optimize.UglifyJsPlugin({ mangle: false, sourcemap: false }),
]

};

我的入口点是index.webpack.js:

require('file?name=[name].[ext]!./index.html');
require('jQuery');
require('bootstrap');
require('file?name=[name].[ext]!./css/footer.css');
require('file?name=[name].[ext]!./css/header.css');
require('file?name=[name].[ext]!./css/styles.css');
require('file?name=[name].[ext]!./fonts/HelveticaRounded-Black.eot');
require('file?name=[name].[ext]!./fonts/HelveticaRounded-Black.svg');
require('file?name=[name].[ext]!./fonts/HelveticaRounded-Black.ttf');
require('file?name=[name].[ext]!./fonts/HelveticaRounded-Black.woff');
require('file?name=[name].[ext]!./img/butterfly.gif');
require('file?name=[name].[ext]!./img/dr photo.jpg');
require('file?name=[name].[ext]!./img/firefly.gif');
require('file?name=[name].[ext]!./img/footerspikes.gif');
require('file?name=[name].[ext]!./img/mainheaderimage.jpg');
require('file?name=[name].[ext]!./img/mushrooms.gif');
require('file?name=[name].[ext]!./img/teethkids.gif');
require('file?name=[name].[ext]!./img/titlebanner.gif');
require('file?name=[name].[ext]!./refs/footer.html');
require('file?name=[name].[ext]!./refs/header.html');
require('file?name=[name].[ext]!./refs/leftmargin.html');
require('file?name=[name].[ext]!./refs/rightmargin.html');

你怎么认为?

--尝试第一个答案后编辑--

我更新的 webpack.config.js:

var debug = process.env.NODE_ENV !== "production";

var webpack = require('webpack');
var path = require('path');
var htmlWebpackPlugin = require('html-webpack-plugin');
var commonsChunkPlugin = require('webpack/lib/optimize/CommonsChunkPlugin');
var cleanWebpackPlugin = require('clean-webpack-plugin');

module.exports = {
    context: path.join(__dirname, 'src'),
    debug: true,
    entry: {
        entry: path.join(__dirname, 'src', 'index.webpack.js'),
        vendor: ['jquery', 'bootstrapjs']
    },
    resolve: {
        alias: {
            'jquery': path.join(__dirname, 'node_modules', 'jquery', 'dist', 'jquery.min.js'),
            'bootstrapjs': path.join(__dirname, 'node_modules', 'bootstrap', 'dist', 'js', 'bootstrap.min.js')
        }
    },
    output: {
        path: path.join(__dirname, 'dist'),
        filename: "[name].[chunkhash].bundle.min.js"
    },
    module: {
        loaders: [
            {
                test:/\.js$/,
                exclude:/node_modules/,
                include:path.join(__dirname, 'src'),
                loader:'babel-loader',
            },
            {
                test:/\.css$/,
                include:path.join(__dirname, 'src'),
                loader:'style-loader!css-loader'
            },
            {
                test:/\.less$/,
                include:path.join(__dirname, 'src'),
                loader:'style-loader!css-loader!less-loader'
            },
            {
                test:/\.(png|woff|woff2|eot|ttf|svg)$/,
                include:path.join(__dirname, 'src'),
                loader: 'url-loader?limit=100000'
            },
            {
                test:/\.(jpe?g|png|gif|svg)$/i,
                include:path.join(__dirname, 'src'),
                loader: 'url-loader?limit=100000!img?progressive=true'
            },
            {
                test:/\.html$/,
                include:path.join(__dirname, 'src'),
                loader: 'html-loader'
            }
        ]
    },
    devServer: {
        contentBase: path.join(__dirname, 'dist'),
        inline: true,
        stats: 'errors-only'
    },
    plugins: debug ? [
        new cleanWebpackPlugin(['dist']),
        new htmlWebpackPlugin({
            template: path.join(__dirname, 'src', 'pages', 'index.html'),
            hash: true,
            chunks: 'commons'
        }),
        new webpack.ProvidePlugin({ 
            $: "jquery", 
            jQuery: "jquery",
            jquery: "jquery"
        }),
        new commonsChunkPlugin({
            name: ['commons', 'vendor', 'bootstrap']
        })
    ] : [
        new cleanWebpackPlugin(['dist']),
        new webpack.optimize.DedupePlugin(),
        new webpack.optimize.OccurenceOrderPlugin(),
        new webpack.optimize.UglifyJsPlugin({ mangle: false, sourcemap: false }),
        new htmlWebpackPlugin({
            template: path.join(__dirname, 'src', 'pages', 'index.html'),
            hash: true,
            chunks: 'commons'
        }),
        new webpack.ProvidePlugin({ 
            $: "jquery", 
            jQuery: "jquery",
            jquery: "jquery"
        }),
        new commonsChunkPlugin({
            name: ['commons', 'vendor', 'bootstrap']
        })
    ]
};

我的index.webpack.js 现在是一个空文件。

我基本上仍然遇到与以前完全相同的问题,只是我使用 html-webpack-plugin 而不是要求入口文件中的所有文件。

$ 未定义,即使我使用 Provideplugin 定义它。

bootstrap css 没有通过,当我把它放在供应商列表中时它不起作用。

有任何想法吗?


自从您开始使用以来,现在是切换到 Webpack 2 的好时机https://webpack.js.org/ https://webpack.js.org/有关文档,目前处于测试阶段,您可以使用以下命令安装它beta分发标签通过:

npm install webpack@beta --save

太好了,现在深吸一口气,让我们尝试解决下一个问题:您必须忘记提供原始应用程序源和资产,并始终将您的 Web 服务器指向输出目录(或者简单地使用webpack-dev-server)。让我尝试解释一下。

Webpack 是一个模块捆绑器,它积极优化分发,几乎所有功能都依赖于模块加载器。模块加载器的作用是获取对源或资产的静态引用,并生成 JS 模块。 Oprah 秀:CSS 源得到一个 JS 模块,PNG 得到一个 JS 模块,MP3 得到一个 JS 模块——每个人都得到一个模块 \o/。如果您习惯于简单地编写源代码、放入资源并将 Web 服务器指向根目录并从 HTML 静态引用这些内容,这可能会让您陷入困境,因为它不适用于 Webpack。

Using file-loader这样不会让你有任何收获,因为你对输出没有做任何事情。记住我说过一切都有一个模块,什么file-loaderProduces 是一个将字符串导出到输出中的某些资产的模块。因此,您必须开始做的第一件事就是开始获取这些输出,然后将它们注入到 HTML 中以获得实际的引用。

你应该考虑使用html-webpack-plugin https://github.com/ampedandwired/html-webpack-plugin生成必要的 HTML 模板并需要 JS 源中所需的其他资源。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Webpack 构建简单网站 的相关文章

  • JQuery:替换div内的字符串

    div p NUMBER times p p Place N NUMBER p div 如何替换内容 div 内的所有 NUMBER 我试过replace方法但没有成功 Thanks 您可以使用标准的 Javascript 字符串替换函数
  • 为什么我可以在css中将gif设置为背景图片url(),但无法将视频mp4设置为背景url?

    为什么我可以在css中将gif设置为背景图片url 但无法将视频mp4设置为背景url 我尝试了一切 甚至将 url 设置为指向 svg 该 svg 中包含在 src 属性中编码为 base64 的异物视频 但行不通 我不需要 video
  • 缩小 HTML、CSS 和 Javascript 是一个坏主意吗?

    维基百科定义缩小 http en wikipedia org wiki Minification 28programming 29 as 从源代码中删除所有不必要的字符而不改变其功能的过程 这些不必要的字符通常包括空格字符 换行符 注释 有
  • 如何重写 JQuery 的 .show() 和 .hide() 以触发前后事件?

    我试图重写 JQuery show 和 hide 方法 以在使用以下代码调用它们之前和之后启动触发事件 document ready function dataBox bind afterShow function alert afterS
  • 使用 bootstrap 将并排的网格位置交换到顶部和底部

    我有两个 div 内容和图像 它们在中等屏幕中并排放置 col md 6 内容 col md 4 图片 因此 当屏幕尺寸更改为小屏幕和 xs 屏幕时 这些 div 不应该并排放置 它们应该像这样顶部和底部对齐 image content 这
  • 强制浏览器重新加载index.htm

    通过在浏览器地址字段中输入 URL www mydomain com index htm 或仅 www mydomain com 并按 Enter 键 如何强制浏览器在加载页面时始终加载最新版本的 index htm 我正在 Chrome
  • 如何在 jQuery Mobile 中将标题设置为全屏模式?

    当我设置属性时data fullscreen true 对于标题 它工作正常 但当我收到一些事件时 我确实需要在运行时执行此操作 我试过这个 document ready function data role header attr dat
  • 鼠标移动时画布拖动

    我正在尝试构建一个可以使用鼠标移动拖动的画布 我做了一些我无法理解的错误 因为一开始似乎有效 然后出现了一个增量错误 使画布移动得太快 考虑以下代码 window onload function var canvas document ge
  • 如何在 Windows 网络中的 Intranet Web 应用程序中获取用户的用户名

    我内部有一个简单的 HTML 页面 它只显示一个表单并要求用户填写 我想自动捕获Windows域用户名和机器名 并将其与表单中收集的数据一起提交 我可以在客户端这样做吗 HTML JavaScript 或者我被迫在服务器端执行此操作 我还不
  • 我可以使用 jQuery 的 AJAX 将表单信息提交到 Google Spreadsheets 吗?

    我喜欢能够使用谷歌电子表格 但以视觉方式集成到我的网站中很棘手 所以我想我会重新创建他们的表单 一个简单的剪切 粘贴 通过 AJAX 提交表单 数据将转到电子表格 我可以将我的用户重定向到比谷歌默认的 谢谢你所做的一切 更漂亮的东西你刚刚做
  • 获取选定的文本框 ID jQuery

    在我的表单中 我有几个文本框 例如txtItemCode1 txtItemCode2 etc 如果我在其中任何一个上按 Enter 键 我会使用此代码执行某些操作 但我想获取选定的文本框 ID 我怎样才能做到这一点 变量 id 应该有您正在
  • django 模板上的 vscode html 自动套用格式

    我喜欢 VSCode 的保存自动格式功能 直到它弄乱了我的模板代码 它错误地将我的 django 模板语法格式化为一行代码 有时非常长的一行 所以不用这段代码 for row in ABCDEFGH tr for col in 123456
  • 如何在数据表角度中基于 JSON 动态填充表值?

    我在用着Angular 数据表 https l lin github io angular datatables 我需要能够根据返回的数据动态创建表 换句话说 我不想指定列标题 Example json数据 id 2 city Baltim
  • select2 验证 - 选择至少一个值

    我在用select2 http ivaynberg github io select2 and jQuery 验证 http jqueryvalidation org 插件 select2 的 HTML div class form gro
  • 基本 jQuery 动画:省略号(三个点依次出现)

    我需要的 我需要一个动画省略号 一个点一个接一个地出现 动画需要循环播放 我想通过 jQuery 实现这一点 动画序列 Frame 1 等待您的选择 Frame 2 等待您的选择 Frame 3 等待您的选择 Frame 4 等待您的选择
  • 使用 jQuery 从 ASP.Net JSON 服务获取数据

    我正在尝试调用 Google 地图地理编码 API 从纬度 经度对中获取格式化的地址 然后将其记录到控制台 我正在尝试获取为给定位置返回的第一个 formatted address 项目 我很简单无法从 JSON 中提取该项目 我不知道为什
  • jQuery DataTables:隐藏最后一行的“删除”按钮

    我有一个DataTable在某些情况下可以返回多个页面 返回的每一行都显示一个删除按钮 但我需要它在返回的最后一行上隐藏此按钮 无论是 1 pg 还是多个 因此不能在其中使用 CSS 我想学习如何实现这一点 因为DataTables对我来说
  • jQuery UI 对话框 - 关闭后无法打开

    我有一个问题jquery ui dialog box https jqueryui com dialog 问题是 当我关闭对话框然后单击触发它的链接时 除非刷新页面 否则它不会再次弹出 如何在不刷新实际页面的情况下回调对话框 下面是我的代码
  • 在什么情况下,使用 HTTP/2 单独加载图像会比使用 HTTP/1.1 中的精灵一次加载所有图像慢?

    HTTP 2 使多路复用连接成为可能 从而消除了与服务器的多个连接的需要 通过单个连接 可以将许多单独的图像发送到客户端 这避免了将多个图像组合成一个并使用 CSS 将其分开的旧图像精灵模式 我很好奇精灵在 HTTP 2 世界中是否仍然会更
  • 如何强制下载图片?

    我的页面上有一个动态生成的图像 如下所示 img src 我不想告诉我的用户右键单击图像并点击保存 而是想公开一个下载链接 单击该链接将提示下载图像 如何实现这一目标 最初我在 js 中尝试这样做 var path my image att

随机推荐

  • 使用 CSS 设计 XML 样式时,如何引用包含句点或冒号的标签名称?

    我正在设计一个包含以下标签的 XML 文档
  • 使用 Python 通过 Selenium 设置 chromedriver 代理身份验证

    我正在使用 Python 和 Selenium 库编写一个测试套件 使用 chromedriver 我使用以下方式设置代理 chrome options webdriver ChromeOptions chrome options add
  • Azure 资源标识符格式 URI -URL 或 URN

    我正在使用 Azure 我注意到它为每个资源组和资源创建了一个如下所示的 ID 对于资源组 subscriptions
  • R download.file 使用“wget”方法并指定额外的 wget 选项

    我有一个关于使用的可能相当基本的问题download fileR 中的函数使用wget选项并使用一些 wget 额外选项 但我就是无法让它工作 我想做的 下载一个网页的本地副本 实际上是几个网页 但目前的挑战是让它即使只有 1 个也能工作
  • 导轨联系表不起作用

    我正在尝试创建一个提交表单的联系人 但我没有收到任何电子邮件 在我的 config application rb 中我添加了 config action mailer raise delivery errors true config ac
  • AngularJS 向路由添加授权

    如何向 AngularJS 和 ui router 添加授权 我正在使用 modulg ng oauthhttps github com andreareginato oauth ng https github com andrearegi
  • Linq 查询具有分组依据

    RowNum IMAGEID SCANEDATE COUNT 1 10000131 2012 07 04 00 00 00 000 1 2 10002626 2012 08 03 00 00 00 000 1 3 10003348 2012
  • React:ref 不是 prop

    使用 React js 时 为什么我得到 ref is not a prop key is not a prop error Notes 但是我在使用 webpack dev server 运行时没有遇到此错误 我没有ref or key在
  • 使用字符串作为函数参数

    我确信这很简单 但我找不到解决方案 我想使用包含字符串的变量作为函数的参数 x lt c 1 10 myoptions lt trim 0 na rm FALSE 现在 像 foo lt mean x myoptions 应该是一样的 fo
  • git 撤消受保护分支上的提交?

    有没有办法撤消受保护分支上的提交 我的意思是 如果您推送了错误的提交 在非受保护的分支上 您可以将 HEAD 重置为最后一个所需的提交 或者恢复错误的提交并强制推送 从而撤消它 但受保护的分支不允许强制推送 对于这种情况 有什么方法可以解决
  • 如何确定寄存器是否从右到左加载,反之亦然

    在查看 gdb 输出并查看汇编调用时 通常我可以找到一个使用硬编码值的命令来确定寄存器是否从右到左加载 反之亦然 通常类似于以下内容 sub rsp 16 or sub 16 rsp 但其他时候 没有像上面这样的值可见 我所看到的都是类似以
  • Symfony 2 支持部分表单绑定吗?

    我的问题 Symfony 2 支持吗PATCH请求 或任何类型的partial表单内容提交 如果是这样 是否有 正确 或更准确地说 首选 方法来做到这一点 除了PRE BIND 见下文 事件方法 还有其他模式或方法来解决这个问题吗 如果有其
  • Haskell 函数返回存在类型

    是否可以编写一个 Haskell 函数来生成隐藏了确切类型参数的参数化类型 IE 就像是f T gt exists a U a 明显的尝试 LANGUAGE ExistentialQuantification data D a D a da
  • 在 Windows Phone 8 中保存 LongListSelector 控件的滚动位置

    我需要保存 LongListSelector 位置 以便在返回页面后恢复它 首先 我将 GetItemsInView 与 WP7 一起使用 效果很好 然后用 WP8 它就消失了 我必须使用已实现项目 http msdn microsoft
  • 有没有办法告诉 Dropbox 不要上传某个文件? (日食相关)

    我正在尝试在两台计算机之间同步代码项目 一台运行 Windows 另一台运行 Ubuntu 12 04 我在两台机器上都使用 Eclipse 但是 元数据由于操作系统不兼容 Eclipse 生成的文件夹导致 Eclipse 崩溃 我想知道是
  • 说非确定性图灵机可以在多项式时间内解决 NP 问题会产生什么后果?

    这些天我一直在研究NP问题 计算复杂性和理论 我相信我终于掌握了图灵机的概念 但我有一些疑问 我可以接受 非确定性图灵机对于给定状态和正在读取的符号有几种选择 并且它总是会选择最佳选项 如维基百科所述 NTM 如何 知道 其中哪一个 应该采
  • 以高分辨率从网络摄像头捕获图片,同时使用 DirectShow.Net 以较低分辨率预览

    我正在使用 DirectShow Net 将网络摄像头流式传输到我的 C 4 0 应用程序以读取 QR 码 它每 0 5 秒拍摄一次快照 看看是否可以找到任何 QR 码并对其进行解码 这在我的开发计算机上在我可以使用网络摄像头的任何分辨率下
  • 实现一键登录以与后端交互

    我正在实施一键登录 如所描述的here https developers google com identity one tap android idtoken auth一切基本上都很好 我可以获得一个令牌 在后端验证它等等 但我有一个问题
  • 如何保护 Laravel 模型属性

    当使用其他框架或纯 PHP 时 我会保护我的模型属性 然后 我根据需要创建公共 getter 和 setter 并使用它们代理 get and set 这有助于我晚上睡觉 最近我开始使用 Laravel 我对 Eloquent 模型的 不受
  • 使用 Webpack 构建简单网站

    我第一次尝试让 webpack 工作 并且是在一个简单的网站上进行的 但是无论我尝试什么 它都无法正常工作 我已经坚持了好几个星期了 我认真地尝试了每一条线索 但都无济于事 我只需要一个对 webpack 没有问题的人来查看我的代码并提供有