【发布时间】:2017-08-19 16:57:09
【问题描述】:
我是 React 和 Webpack 以及所有这些东西的新手。我已经使用 Webpack 创建了一个 React 应用程序,并且我使用 webpack-dev-server 来创建和调试我的应用程序。
所以在我的 webpack.config.js 文件中我有这个代码:
var debug = process.env.NODE_ENV !== "production";
var webpack = require('webpack');
var path = require('path');
const ExtractTextPlugin = require("extract-text-webpack-plugin");
module.exports = {
context: path.join(__dirname, "src"),
devtool: debug ? "inline-sourcemap" : false,
entry: "./js/client.js",
module: {
loaders: [
{
test: /\.js?$/,
exclude: /(node_modules|bower_components)/,
loader: 'babel-loader',
query: {
presets: ['react', 'es2015', 'stage-0'],
plugins: ['react-html-attrs', 'transform-decorators-legacy', 'transform-class-properties'],
}
},
{
test: /\.scss$/,
use: debug ? [{
loader: "style-loader" // creates style nodes from JS strings
}, {
loader: "css-loader" // translates CSS into CommonJS
}, {
loader: "sass-loader" // compiles Sass to CSS
}] : ExtractTextPlugin.extract({ fallback: "style-loader", use: "css-loader" })
}
]
},
output: {
path: __dirname + "/src/",
filename: "client.min.js"
},
plugins: debug ? [] : [
new ExtractTextPlugin('style.min.css'),
new webpack.optimize.DedupePlugin(),
new webpack.optimize.OccurrenceOrderPlugin(),
new webpack.optimize.UglifyJsPlugin({ mangle: false, sourcemap: false }),
],
externals: {
"jquery": "jQuery",
"react": "React",
"react-dom": "ReactDOM",
"animejs": "anime"
}
};
当我使用 webpack-dev-server --content-base src --inline --hot 时,我看到我的应用程序在 localhost:8080 中运行,但现在我想让应用程序为生产做好准备。所以我在终端中运行了这些代码:
$: NODE_ENV=production
$: webpack
它不会改变任何东西!所以第一个问题:NODE_ENV=production 有什么问题?当我将 webpack 的第一行更改为 var debug = process.env.NODE_ENV === "production"; //false 时,它可以工作。
还有其他问题!
我正在使用 sass,当debug === false 在浏览器中打开我的 index.html 文件时,我的样式没有被编译!只是我所有的sass代码都复制到style.min.css文件问题应该出在这部分代码上:
{
test: /\.scss$/,
use: debug ? [{
loader: "style-loader" // creates style nodes from JS strings
}, {
loader: "css-loader" // translates CSS into CommonJS
}, {
loader: "sass-loader" // compiles Sass to CSS
}] : ExtractTextPlugin.extract({ fallback: "style-loader", use: "css-loader" })
}
最后一个问题是绝对路径!我的应用中有这段代码:
<img src="/images/avatar.jpg">
当我使用 webpack-dev-server 时它可以工作,但是当我使用 webpack 时,由于它试图从我的 linux 的根目录打开它,所以找不到图像。
所以这些是我的问题:
- 为什么 NODE_ENV=production 不起作用?
- 我应该如何编译 sass 并将 css 放入 style.min.css 中?
- 如何在我的应用中使用绝对路径?
提前致谢
【问题讨论】:
-
试试
webpack -p -
谢谢。这有助于获得此代码:
NODE_ENV='production' webpack -p它解决了第一个问题。 -
你不需要 NODE_ENV=production,
-p正在处理这个 -
你的样式也应该缩小..
-
@webdeb 在我的应用程序中没有!当我运行
webpack -p或webpack时,会发生同样的事情。其实现在我发现NODE_ENV='production' webpack -p和NODE_ENV='production' webpack也这样做了。
标签: javascript css reactjs webpack sass