CSS 在生产环境中无法使用 Laravel Mix 5
CSS isn't working in production environment with Laravel Mix 5
这是我的 Laravel + Vue SPA 应用程序。
我有这个 Laravel 混合配置文件:
const path = require('path');
const fs = require('fs-extra');
const mix = require('laravel-mix');
const tailwindcss = require('tailwindcss');
require('laravel-mix-bundle-analyzer');
function publishAssets() {
const publicDir = path.resolve(__dirname, './public');
if (mix.inProduction()) {
fs.removeSync(path.join(publicDir, 'dist'));
}
fs.copySync(path.join(publicDir, 'build', 'dist'), path.join(publicDir, 'dist'));
fs.removeSync(path.join(publicDir, 'build'));
}
mix.js('resources/js/app.js', 'public/dist/js')
.sass('resources/sass/app.scss', 'public/dist/css').options({
postCss: [tailwindcss('./tailwind.config.js')],
processCssUrls: false,
});
// alias the ~/resources folder
mix.webpackConfig({
plugins: [
// new BundleAnalyzerPlugin()
],
resolve: {
extensions: ['.js', '.json', '.vue'],
alias: {
'@': `${__dirname}/resources`,
'~': path.join(__dirname, './resources/js'),
ziggy: path.join(__dirname, './vendor/tightenco/ziggy/dist/js/route.js'),
},
},
output: {
chunkFilename: 'dist/js/[chunkhash].js',
path: mix.config.hmr ? '/' : path.resolve(__dirname, './public/build'),
},
});
mix.then(() => {
if (!mix.config.hmr) {
process.nextTick(() => publishAssets());
}
});
它在 npm run watch
上工作正常,但是当我在 npm run production
上工作时,CSS 不起作用。该网站加载并运行,但缺少 CSS。
任何人都可以看到我的代码中的原因吗?
这是我的 spa.blade.php:
<link rel="stylesheet" href="{{ mix('dist/css/app.css') }}">
...
<script src="{{ mix('dist/js/app.js') }}"></script>
在 Chrome 开发工具的网络选项卡中,CSS 文件在开发环境中为 270kb,在生产环境中为 42kb。
翻译有误。
我暂时称此问题已解决,因为我的网站已开始运行。
导航非常困难,因为我在开发分支上工作了 6 个月,并且它通过 npm run watch
工作。当我合并到 master 时,npm run production
加载不正确——样式一半存在一半丢失。
解决方案是从 tailwindcss@1.9
降级到 tailwindcss@1.4
。
一路上,我阅读了一些关于 postcss 的内容,或者一些无法使用 npm run production
.
上的 --no-progress
标志的内容
有人可以尝试删除该标志,但我已经降级了 tailwind,所以我没有尝试。
在我的例子中,这是由于在 tailwindcss 配置文件中设置了错误的 属性“清除”。
当我 运行 "npm 运行 hot" 或 "npm 运行 dev" 时,网站没问题。
但是当我 运行 “npm 运行 prod” 时它坏了。
开发模式似乎忽略了 属性“清除”。
这是我的 Laravel + Vue SPA 应用程序。
我有这个 Laravel 混合配置文件:
const path = require('path');
const fs = require('fs-extra');
const mix = require('laravel-mix');
const tailwindcss = require('tailwindcss');
require('laravel-mix-bundle-analyzer');
function publishAssets() {
const publicDir = path.resolve(__dirname, './public');
if (mix.inProduction()) {
fs.removeSync(path.join(publicDir, 'dist'));
}
fs.copySync(path.join(publicDir, 'build', 'dist'), path.join(publicDir, 'dist'));
fs.removeSync(path.join(publicDir, 'build'));
}
mix.js('resources/js/app.js', 'public/dist/js')
.sass('resources/sass/app.scss', 'public/dist/css').options({
postCss: [tailwindcss('./tailwind.config.js')],
processCssUrls: false,
});
// alias the ~/resources folder
mix.webpackConfig({
plugins: [
// new BundleAnalyzerPlugin()
],
resolve: {
extensions: ['.js', '.json', '.vue'],
alias: {
'@': `${__dirname}/resources`,
'~': path.join(__dirname, './resources/js'),
ziggy: path.join(__dirname, './vendor/tightenco/ziggy/dist/js/route.js'),
},
},
output: {
chunkFilename: 'dist/js/[chunkhash].js',
path: mix.config.hmr ? '/' : path.resolve(__dirname, './public/build'),
},
});
mix.then(() => {
if (!mix.config.hmr) {
process.nextTick(() => publishAssets());
}
});
它在 npm run watch
上工作正常,但是当我在 npm run production
上工作时,CSS 不起作用。该网站加载并运行,但缺少 CSS。
任何人都可以看到我的代码中的原因吗?
这是我的 spa.blade.php:
<link rel="stylesheet" href="{{ mix('dist/css/app.css') }}">
...
<script src="{{ mix('dist/js/app.js') }}"></script>
在 Chrome 开发工具的网络选项卡中,CSS 文件在开发环境中为 270kb,在生产环境中为 42kb。
翻译有误。
我暂时称此问题已解决,因为我的网站已开始运行。
导航非常困难,因为我在开发分支上工作了 6 个月,并且它通过 npm run watch
工作。当我合并到 master 时,npm run production
加载不正确——样式一半存在一半丢失。
解决方案是从 tailwindcss@1.9
降级到 tailwindcss@1.4
。
一路上,我阅读了一些关于 postcss 的内容,或者一些无法使用 npm run production
.
--no-progress
标志的内容
有人可以尝试删除该标志,但我已经降级了 tailwind,所以我没有尝试。
在我的例子中,这是由于在 tailwindcss 配置文件中设置了错误的 属性“清除”。
当我 运行 "npm 运行 hot" 或 "npm 运行 dev" 时,网站没问题。 但是当我 运行 “npm 运行 prod” 时它坏了。 开发模式似乎忽略了 属性“清除”。