This repository was archived by the owner on Mar 17, 2021. It is now read-only.
-
-
Notifications
You must be signed in to change notification settings - Fork 256
feat(index): add cssOutputPath
option (option.cssOutputPath
)
#150
Closed
Closed
Changes from all commits
Commits
Show all changes
45 commits
Select commit
Hold shift + click to select a range
a92f630
fix: outputs from useRelativePath
adriancmiranda e15e3a4
fix: Allowing .travis.yml file in git
adriancmiranda 6c5f129
style: indentation
adriancmiranda 509855d
fix: outputs
adriancmiranda 1eb69cd
style: keeping only double quotes
adriancmiranda 7dbce89
fix: textOutputPath parameter validation
adriancmiranda ffe9709
fix: normalized outputPath sep in windows os
adriancmiranda f2ebd86
docs: textOutputPath parameter
adriancmiranda d3ddff5
docs: textOutputPath parameter
adriancmiranda 7cf4921
docs: textOutputPath parameter
adriancmiranda 74c9e98
style: keeping only double quotes
adriancmiranda 5c4d2a4
fix: public path from js files
adriancmiranda bdbb0e2
style: identation to tabs
adriancmiranda 39b66b2
chore: removed vendor references
adriancmiranda 4d1a43c
chore: changing textOutputPath to cssOutputPath
adriancmiranda 3dde284
docs: changing textOutputPath to cssOutputPath
adriancmiranda 584f009
fix: cssOutputPath defaults
adriancmiranda 41516e5
fix: script path validation
adriancmiranda 7b9ee2c
fix: cssOutputPath default validation
adriancmiranda 02983bf
fix: type validation is needed to empty values
adriancmiranda 23dffad
fix: typo
adriancmiranda 9c62249
Merge branch 'master' into master
adriancmiranda 17e608b
Merge branch 'master' into master
adriancmiranda 564e84d
Merge branch 'master' of https://github.com/adriancmiranda/file-loader
adriancmiranda 788a189
refactor: removes support for older node version
adriancmiranda 02c8e32
refactor: strict mode
adriancmiranda f190ee5
docs: adding examples folder
adriancmiranda 298a059
docs: sample improvement
adriancmiranda 68ac897
doc: sample with dev mode
adriancmiranda db0596c
docs: sample with asset request from html
adriancmiranda 1a0be65
docs: sample build fixed up
adriancmiranda 6ea9f7e
docs: sample build fixed up
adriancmiranda 26077c7
docs: added examples builder
adriancmiranda 3bf2dac
test: examples compilation
adriancmiranda 7fc4bd2
test: reporter
adriancmiranda c66447b
test: _module.issuer.context mockup
adriancmiranda 3d136e3
test: webpack config mock-up
adriancmiranda 57786c9
docs: update samples
adriancmiranda 8e511d7
chore: recovering the file-loader icon
adriancmiranda 8ff353f
test: cssOutputPath option
adriancmiranda 60e3aa3
fix: output dirname rule should accept urls like ../foo/../bar
adriancmiranda e4b006e
fix: default publicPath
adriancmiranda 1cf0f71
fix: default publicPath
adriancmiranda 1cf6f67
Merge branch 'master' into master
adriancmiranda bf65289
feat: add option.cssOutputPath
adriancmiranda File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
{"C:\\Users\\Adrian Miranda\\Sites\\ambox\\github\\adriancmiranda\\file-loader\\src\\cjs.js":{"size":45,"mtime":1496936755980,"hashOfConfig":"16xjw5j","results":{"filePath":"C:\\Users\\Adrian Miranda\\Sites\\ambox\\github\\adriancmiranda\\file-loader\\src\\cjs.js","messages":[],"errorCount":0,"warningCount":0}},"C:\\Users\\Adrian Miranda\\Sites\\ambox\\github\\adriancmiranda\\file-loader\\src\\helper.js":{"size":334,"mtime":1496934738398,"hashOfConfig":"16xjw5j","results":{"filePath":"C:\\Users\\Adrian Miranda\\Sites\\ambox\\github\\adriancmiranda\\file-loader\\src\\helper.js","messages":[],"errorCount":0,"warningCount":0}},"C:\\Users\\Adrian Miranda\\Sites\\ambox\\github\\adriancmiranda\\file-loader\\src\\index.js":{"size":3601,"mtime":1496941794969,"hashOfConfig":"16xjw5j","results":{"filePath":"C:\\Users\\Adrian Miranda\\Sites\\ambox\\github\\adriancmiranda\\file-loader\\src\\index.js","messages":[],"errorCount":0,"warningCount":0}},"C:\\Users\\Adrian Miranda\\Sites\\ambox\\github\\adriancmiranda\\file-loader\\test\\correct-filename.test.js":{"size":8332,"mtime":1496936927390,"hashOfConfig":"16xjw5j","results":{"filePath":"C:\\Users\\Adrian Miranda\\Sites\\ambox\\github\\adriancmiranda\\file-loader\\test\\correct-filename.test.js","messages":[],"errorCount":0,"warningCount":0}},"C:\\Users\\Adrian Miranda\\Sites\\ambox\\github\\adriancmiranda\\file-loader\\test\\optional-file-emission.test.js":{"size":628,"mtime":1496936290558,"hashOfConfig":"16xjw5j","results":{"filePath":"C:\\Users\\Adrian Miranda\\Sites\\ambox\\github\\adriancmiranda\\file-loader\\test\\optional-file-emission.test.js","messages":[],"errorCount":0,"warningCount":0}},"C:\\Users\\Adrian Miranda\\Sites\\ambox\\github\\adriancmiranda\\file-loader\\test\\helper.test.js":{"size":847,"mtime":1496949000783,"hashOfConfig":"16xjw5j","results":{"filePath":"C:\\Users\\Adrian Miranda\\Sites\\ambox\\github\\adriancmiranda\\file-loader\\test\\helper.test.js","messages":[],"errorCount":0,"warningCount":0}}} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,2 @@ | ||
/node_modules | ||
/dist | ||
/dist |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,18 +1,28 @@ | ||
# samples | ||
examples/*/dist/* | ||
|
||
# development | ||
/node_modules | ||
node_modules/ | ||
/coverage | ||
|
||
logs | ||
*.log | ||
npm-debug.log* | ||
yarn-debug.log* | ||
.eslintcache | ||
/dist | ||
/local | ||
/reports | ||
.DS_Store | ||
logs | ||
*.log | ||
*.log* | ||
Thumbs.db | ||
.idea | ||
.vscode | ||
*.sublime-project | ||
*.sublime-workspace | ||
*.sublime-workspace | ||
|
||
# dotfiles | ||
.* | ||
!.babelrc | ||
!.editorconfig | ||
!.eslintcache | ||
!.eslintignore | ||
!.eslintrc | ||
!.gitattributes | ||
!.gitignore | ||
!.travis.yml | ||
*~ | ||
*#* |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
21 changes: 21 additions & 0 deletions
21
examples/relative-path-with-multiple-css-outputs/package.json
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
{ | ||
"name": "use-relative-path", | ||
"author": "@adriancmiranda", | ||
"scripts": { | ||
"dev": "webpack-dev-server --open --env.dev", | ||
"prebuild": "rimraf dist/", | ||
"build": "webpack -p" | ||
}, | ||
"optionalDependencies": { | ||
"css-loader": "0.28.0", | ||
"extract-text-webpack-plugin": "2.1.0", | ||
"html-webpack-plugin": "2.28.0", | ||
"ip": "1.1.5", | ||
"rimraf": "2.6.1", | ||
"style-loader": "0.16.1", | ||
"webpack-dev-server": "2.4.2" | ||
}, | ||
"devDependencies": { | ||
"webpack": "2.4.1" | ||
} | ||
} |
1 change: 1 addition & 0 deletions
1
examples/relative-path-with-multiple-css-outputs/source/scripts/desktop.js
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
console.log('Desktop'); |
1 change: 1 addition & 0 deletions
1
examples/relative-path-with-multiple-css-outputs/source/scripts/mobile.js
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
console.log('Mobile'); |
50 changes: 50 additions & 0 deletions
50
examples/relative-path-with-multiple-css-outputs/source/styles/desktop.css
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
/* Desktop styles */ | ||
*, | ||
*:after, | ||
*:before { | ||
-webkit-tap-highlight-color: transparent; | ||
tap-highlight-color: transparent; | ||
box-sizing: border-box; | ||
outline-style: none; | ||
} | ||
|
||
html, | ||
body { | ||
width: 100%; | ||
height: 100%; | ||
} | ||
|
||
body { | ||
font-family: Helvetica, sans-serif; | ||
font-size: 16px; | ||
line-height: 10px; | ||
margin: 0; | ||
} | ||
|
||
div, | ||
canvas { | ||
position: absolute; | ||
width: 100%; | ||
height: 100%; | ||
background-color: rgb(77, 155, 216); | ||
} | ||
|
||
div { | ||
background: rgba(0,0,0,0.2) url("../../../../.github/assets/file_loader_icon.svg") no-repeat 50% 50%; | ||
} | ||
|
||
img { | ||
position: absolute; | ||
right: 10px; | ||
bottom: 10px; | ||
display: block; | ||
} | ||
|
||
div:before { | ||
position: absolute; | ||
display: block; | ||
margin-top: 10px; | ||
margin-left: 10px; | ||
color: #fff; | ||
content: "file-loader / examples / relative-path-with-multiple-output / desktop"; | ||
} |
50 changes: 50 additions & 0 deletions
50
examples/relative-path-with-multiple-css-outputs/source/styles/mobile.css
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
/* Desktop styles */ | ||
*, | ||
*:after, | ||
*:before { | ||
-webkit-tap-highlight-color: transparent; | ||
tap-highlight-color: transparent; | ||
box-sizing: border-box; | ||
outline-style: none; | ||
} | ||
|
||
html, | ||
body { | ||
width: 100%; | ||
height: 100%; | ||
} | ||
|
||
body { | ||
font-family: Helvetica, sans-serif; | ||
font-size: 16px; | ||
line-height: 10px; | ||
margin: 0; | ||
} | ||
|
||
div, | ||
canvas { | ||
position: absolute; | ||
width: 100%; | ||
height: 100%; | ||
background-color: rgb(142, 214, 251); | ||
} | ||
|
||
div { | ||
background: rgba(0,0,0,0.2) url("../../../../.github/assets/file_loader_icon.svg") no-repeat 50% 50%; | ||
} | ||
|
||
img { | ||
position: absolute; | ||
right: 10px; | ||
bottom: 10px; | ||
display: block; | ||
} | ||
|
||
div:before { | ||
position: absolute; | ||
display: block; | ||
margin-top: 10px; | ||
margin-left: 10px; | ||
color: #fff; | ||
content: "file-loader / examples / relative-path-with-multiple-output / mobile"; | ||
} |
13 changes: 13 additions & 0 deletions
13
examples/relative-path-with-multiple-css-outputs/source/views/desktop.html
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
<!DOCTYPE html> | ||
<html> | ||
<head> | ||
<meta charset="UTF-8"> | ||
<title><%= htmlWebpackPlugin.options.title %></title> | ||
</head> | ||
<body> | ||
<canvas id="background"></canvas> | ||
<div> | ||
<img src="${require(`../../../../.github/assets/file_loader_icon.svg`)}" width="30" height="30" alt=""> | ||
</div> | ||
</body> | ||
</html> |
13 changes: 13 additions & 0 deletions
13
examples/relative-path-with-multiple-css-outputs/source/views/mobile.html
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
<!DOCTYPE html> | ||
<html> | ||
<head> | ||
<meta charset="UTF-8"> | ||
<title><%= htmlWebpackPlugin.options.title %></title> | ||
</head> | ||
<body> | ||
<canvas id="background"></canvas> | ||
<div> | ||
<img src="${require(`../../../../.github/assets/file_loader_icon.svg`)}" width="30" height="30" alt=""> | ||
</div> | ||
</body> | ||
</html> |
109 changes: 109 additions & 0 deletions
109
examples/relative-path-with-multiple-css-outputs/webpack.config.js
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,109 @@ | ||
const ip = require('ip'); | ||
const path = require('path'); | ||
const Text = require('extract-text-webpack-plugin'); | ||
const Html = require('html-webpack-plugin'); | ||
const webpack = require('webpack'); | ||
const fileLoader = require.resolve('../../src/cjs'); | ||
|
||
const resolve = (...args) => path.resolve(__dirname, ...args); | ||
|
||
const OUTPUT = { | ||
bundle: 'dist/', | ||
img: 'media/images/', | ||
css: 'styles/', | ||
js: 'scripts/', | ||
}; | ||
|
||
module.exports = (argv = {}) => { | ||
const config = { | ||
devtool: argv.dev ? '#cheap-module-eval-source-map' : '#source-map', | ||
entry: { | ||
desktop: ['./source/scripts/desktop.js', './source/styles/desktop.css'], | ||
mobile: ['./source/scripts/mobile.js', './source/styles/mobile.css'], | ||
}, | ||
output: { | ||
path: resolve(OUTPUT.bundle), | ||
filename: `${OUTPUT.js}[name].js`, | ||
}, | ||
devServer: { | ||
contentBase: resolve(OUTPUT.bundle), | ||
historyApiFallback: true, | ||
stats: 'errors-only', | ||
host: ip.address(), | ||
port: 3000, | ||
}, | ||
module: { | ||
rules: [ | ||
{ | ||
test: /\.css$/, | ||
use: Text.extract({ | ||
publicPath: argv.dev && OUTPUT.bundle, | ||
fallback: 'style-loader', | ||
use: [{ | ||
loader: 'css-loader', | ||
query: { | ||
minimize: false, | ||
}, | ||
}], | ||
}), | ||
}, | ||
{ | ||
test: /\.(jpe?g|png|gif|svg)(\?v=\d+\.\d+\.\d+)?$/, | ||
loader: fileLoader, | ||
options: { | ||
useRelativePath: true, | ||
|
||
/* | ||
|* If you need a multiple output path for any reason | ||
|* @see https://github.com/webpack-contrib/file-loader/issues/149#issuecomment-294290509 | ||
`*/ | ||
cssOutputPath: OUTPUT.css, | ||
|
||
outputPath: OUTPUT.img, | ||
name: '[name].[hash:7].[ext]', | ||
}, | ||
}, | ||
], | ||
}, | ||
plugins: [ | ||
new webpack.DefinePlugin({ | ||
'process.env': { | ||
NODE_ENV: `'${argv.dev ? 'development' : 'production'}'`, | ||
}, | ||
}), | ||
new Text({ | ||
filename: `${OUTPUT.css}[name]${argv.dev ? '' : '.[chunkhash]'}.css`, | ||
disable: !!argv.dev, | ||
allChunks: true, | ||
}), | ||
new Html({ | ||
title: 'file-loader // useRelativePath // mobile', | ||
template: './source/views/mobile.html', | ||
filename: 'mobile.html', | ||
chunks: ['mobile'], | ||
}), | ||
new Html({ | ||
title: 'file-loader // useRelativePath // desktop', | ||
template: './source/views/desktop.html', | ||
filename: 'index.html', | ||
chunks: ['desktop'], | ||
}), | ||
new webpack.HotModuleReplacementPlugin({ quiet: true }), | ||
new webpack.NoEmitOnErrorsPlugin(), | ||
new webpack.NamedModulesPlugin(), | ||
], | ||
}; | ||
|
||
if (argv.dev) { | ||
const host = config.devServer.host; | ||
const port = config.devServer.port; | ||
Object.keys(config.entry).forEach((entry) => { | ||
config.entry[entry] = [ | ||
`webpack-dev-server/client?http://${host}:${port}`, | ||
'webpack/hot/only-dev-server', | ||
].concat(config.entry[entry]); | ||
}); | ||
} | ||
|
||
return config; | ||
}; |
20 changes: 20 additions & 0 deletions
20
examples/relative-path-with-single-css-output/package.json
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
{ | ||
"name": "use-relative-path", | ||
"author": "@adriancmiranda", | ||
"scripts": { | ||
"dev": "webpack-dev-server --open --env.dev", | ||
"prebuild": "rimraf dist/", | ||
"build": "webpack -p" | ||
}, | ||
"optionalDependencies": { | ||
"css-loader": "0.28.0", | ||
"extract-text-webpack-plugin": "2.1.0", | ||
"html-webpack-plugin": "2.28.0", | ||
"rimraf": "2.6.1", | ||
"style-loader": "0.16.1", | ||
"webpack-dev-server": "2.4.2" | ||
}, | ||
"devDependencies": { | ||
"webpack": "2.4.1" | ||
} | ||
} |
49 changes: 49 additions & 0 deletions
49
examples/relative-path-with-single-css-output/source/index.css
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
*, | ||
*:after, | ||
*:before { | ||
-webkit-tap-highlight-color: transparent; | ||
tap-highlight-color: transparent; | ||
box-sizing: border-box; | ||
outline-style: none; | ||
} | ||
|
||
html, | ||
body { | ||
width: 100%; | ||
height: 100%; | ||
} | ||
|
||
body { | ||
font-family: Helvetica, sans-serif; | ||
font-size: 16px; | ||
line-height: 10px; | ||
margin: 0; | ||
} | ||
|
||
div, | ||
canvas { | ||
position: absolute; | ||
width: 100%; | ||
height: 100%; | ||
background-color: purple; | ||
} | ||
|
||
div { | ||
background: rgba(0,0,0,0.5) url("../../../.github/assets/file_loader_icon.svg") no-repeat 50% 50%; | ||
} | ||
|
||
img { | ||
position: absolute; | ||
right: 10px; | ||
bottom: 10px; | ||
display: block; | ||
} | ||
|
||
div:before { | ||
position: absolute; | ||
display: block; | ||
margin-top: 10px; | ||
margin-left: 10px; | ||
color: #fff; | ||
content: "file-loader / examples / relative-path-with-single-output"; | ||
} |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please add e.g an example here :). The current explanation is too jaded to reason about (especially for beginners)
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
hahah, ok, I'll make a sample folder and write some tests on it. I don't know if I finish today but I'll try. Actually, I need to put the
webpack
,style
andcss
loaders andETWP
. Is there any problem?Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
webpack.config.js
path/to/file.(svg|png|gif|jpg)
path/to/file.css
bundle.css
I came back here later in terms of tests 😛
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ok, I didn't saw your message before, so I made a little different :)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The example is 👍 I know it's annoying but we need to get this into the docs aswell 😛
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No, that's fine; It's fair, but I ain't finished yet. ^^
I'll come back later and then I try to write something better.
My thoughts: I'm thinking of merging these two properties (i.e.
useRelativePath
andcssOutputPath
), does it make sense?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Merging them would be a breaking change, please leave it for the moment I need to think about how to handle it at best first 😛 it maybe better a separate PR in conjunction with
webpack-defaults
upgrade and another semver majors e.g the general paths unification like I mentioned beforeUh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
To the README file:
Is it better?