我对整个Node/NPM/Webpack世界都是新手,如果这是显而易见的,我深表歉意.

我正在try 构建一个与WebpackBundle 的简单前端项目.我已经安装了node,还有一个包.已配置json文件.如果我在根目录中运行"npm start",我就不会从控制台收到任何错误,并且我能够在浏览器中转到"localhost:3000",并查看我的"hello,world"输出.

我的下一个任务是包含一个样式表,其中包含对图像的引用,如下所示:

.myimg {background: url(path/to/file.jpg);}

通过这样的设置,我可以通过webpack dev服务器查看图像(通过在web浏览器中转到localhost:3000),但如果我构建项目,则图像的路径是错误的.我不知道我做错了什么,所以我把这个扔给Stackiverse,希望有人知道我在做什么蠢事.

这是我的Package.json文件:

{
  "name": "webpack-test1",
  "version": "0.0.1",
  "description": "My project WTF.",
  "private": true,
  "scripts": {
    "start": "node server.js"
  },
  "devDependencies": {
   "css-loader": "^0.15.2",
   "file-loader": "^0.8.4",
   "style-loader": "^0.12.3",
   "url-loader": "^0.5.6"
  },
  "dependencies": {
    "webpack": "^1.9.6",
    "webpack-dev-server": "^1.8.2"
  }
}

...这是我的网页.配置.js文件:

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

module.exports = {
  entry: [
    "./src/start.js"
],
output: {
    filename: "bundle.js",
    path: path.join(__dirname, 'build'),
    publicPath: '/build/'
},
module: {
    loaders: [
        { test: /\.css$/, loader: 'style-loader!css-loader' },
        { test: /\.(png|jpg)$/, loader: 'file-loader' }
    ]
}

};

...然后是索引.html文件:

<!doctype html>
<html>
<head>
    <title>Webpack Test</title>
</head>

<body>
    <div class="imgtest">hello, world</div>
    <script src="build/bundle.js"></script>
</body>
</html>

...配置文件中引用的"start.js"文件:

require('./test.css');
console.log("y u no work?");

...最后,css文件本身的内容:

.imgtest { background: url(img/volcano.jpg);}

正如我在顶部所说,在webpack dev server world中,图像的路径会正确解析,并显示为DOM元素的背景.在published world中,浏览器告诉我它找不到文件,Safari的控制台清楚地显示了一个错误的文件路径:

http://localhost/build/1b05d814aa13ac035c6b122b9f5974f8.jpg

正确的本地路径是:

http://localhost/~username/webpack1/build/1b05d814aa13ac035c6b122b9f5974f8.jpg

很明显,我做错了什么,但我不知道是什么.任何帮助或建议都将不胜感激.

谢谢

推荐答案

可以啊.我刚想出来.问题在于webpack中的"publicPath"变量.配置.js.我有这个:

publicPath: '/build/'

...回想起来,这显然是一条绝对的道路.我需要的是:

publicPath: './build/'

...这是一条相对路径.现在看来一切正常.

UPDATE:

我对Webpack还很陌生,所以这一切仍然让人困惑.话虽如此...

我想我搞错了.我的网页包项目有一个索引.html文件位于项目的根目录下,我试图将其用作webpack dev服务器将访问的文件,以及构建将使用的入口点.这让我头痛不已,我认为我想出的任何解决办法都不管用.然后我发现:

https://www.npmjs.com/package/html-webpack-plugin

这样可以创建索引.html页面,这意味着它实际上不必作为文件存在.webpack dev server会动态创建它并将其存储在内存中,当您发布到"build"文件夹时,会创建一个索引.html文件将在该文件夹中创建.

也许有一个真正"正确"的方法来处理我在这里提出的问题,但这似乎非常有效,而且它以一种迂回的方式解决了我的问题,因为它完全回避了整个路径问题.

总之,这是一种漫无边际的说法.我希望它能帮助一些人,和/或我希望了解更多这方面的人来到这里,让我明白.

Node.js相关问答推荐

Stripe webhook无法访问Express请求原始正文

NPM:一般的npm二进制依赖可以静态构建吗?

在Node JS中获取控制台选项卡标题

FiRestore UPDATE方法引发错误:&Quot;错误:13内部:收到代码为1&Quot;的RST_STREAM

Puppeteer 的 BrowserFetcher 发生了什么?

NodeJS:zlib.gzipSync 在不同平台上给出不同的明文输出

表达 js 错误处理程序在第一个之后被忽略

仅在 vue 脚本未退出的情况下使用 docker 时出现错误

具有项目外部子路径导入的 Firebase 函数

nyc 代码覆盖不适用于 NodeJs Express 服务器

如何让 vscode 假设一个 node.js 上下文,以便它不假设 `fetch` 存在?

我可以通过 JNI 从 Node.js 调用 Java 吗?如何?

在Go中,编写非阻塞代码有意义吗?

将 myproject/.npmrc 与注册表一起使用

Passport 登录和持久会话

Node.js + Express:应用程序不会开始监听端口 80

React Native ios build:找不到 node

为什么 Node 控制台不显示功能代码?

如何解决 Socket.io 404(未找到)错误?

在 Node.js 中使用公钥加密数据