Security News
JSR Working Group Kicks Off with Ambitious Roadmap and Plans for Open Governance
At its inaugural meeting, the JSR Working Group outlined plans for an open governance model and a roadmap to enhance JavaScript package management.
svelte-loader
Advanced tools
Configure inside your webpack.config.js
:
...
resolve: {
// see below for an explanation
mainFields: ['svelte', 'browser', 'module', 'main']
},
module: {
rules: [
...
{
test: /\.(html|svelte)$/,
exclude: /node_modules/,
use: 'svelte-loader'
}
...
]
}
...
Check out the example project.
Webpack's resolve.mainFields
option determines which fields in package.json are used to resolve identifiers. If you're using Svelte components installed from npm, you should specify this option so that your app can use the original component source code, rather than consuming the already-compiled version (which is less efficient).
If your Svelte components contain <style>
tags, by default the compiler will add JavaScript that injects those styles into the page when the component is rendered. That's not ideal, because it adds weight to your JavaScript, prevents styles from being fetched in parallel with your code, and can even cause CSP violations.
A better option is to extract the CSS into a separate file. Using the emitCss
option as shown below would cause a virtual CSS file to be emitted for each Svelte component. The resulting file is then imported by the component, thus following the standard Webpack compilation flow. Add ExtractTextPlugin to the mix to output the css to a separate file.
...
module: {
rules: [
...
{
test: /\.(html|svelte)$/,
exclude: /node_modules/,
use: {
loader: 'svelte-loader',
options: {
emitCss: true,
},
},
},
{
test: /\.css$/,
use: ExtractTextPlugin.extract({
fallback: 'style-loader',
use: 'css-loader',
}),
},
...
]
},
...
plugins: [
new ExtractTextPlugin('styles.css'),
...
]
...
Alternatively, if you're handling styles in some other way and just want to prevent the CSS being added to your JavaScript bundle, use css: false
.
JavaScript source maps are enabled by default, you just have to use an appropriate webpack devtool.
To enable CSS source maps, you'll need to use emitCss
and pass the sourceMap
option to the css-loader
. The above config should look like this:
module.exports = {
...
devtool: "source-map", // any "source-map"-like devtool is possible
...
module: {
rules: [
...
{
test: /\.(html|svelte)$/,
exclude: /node_modules/,
use: {
loader: 'svelte-loader',
options: {
emitCss: true,
},
},
},
{
test: /\.css$/,
use: ExtractTextPlugin.extract({
fallback: 'style-loader',
use: [{ loader: 'css-loader', options: { sourceMap: true } }],
}),
},
...
]
},
...
plugins: [
new ExtractTextPlugin('styles.css'),
...
]
...
};
This should create an additional styles.css.map
file.
Hot reloading is turned off by default, you can turn it on using the hotReload
option as shown below:
...
module: {
rules: [
...
{
test: /\.(html|svelte)$/,
exclude: /node_modules/,
use: 'svelte-loader',
options: {
hotReload: true
}
}
...
]
}
...
_rerender
and _register
are reserved method names, please don't use them in methods:{...}
dev
mode on (dev:true
) is not necessary.<script>
part of your component, instances will be replaced and re-rendered in place too.
However if your component has lifecycle methods that produce global side-effects, you might need to reload the whole page.svelte/store
, a full reload is required if you modify store
propertiesComponents will not be hot reloaded in the following situations:
process.env.NODE_ENV === 'production'
target
is node
(i.e SSR components)generate
option has a value of ssr
Sometimes it might be necessary for some components to avoid state preservation on hot reload.
This can be configured on a per-component basis by adding a property noPreserveState = true
to the component's constructor using the setup()
method. For example:
export default {
setup(comp){
comp.noPreserveState = true;
},
data(){return {...}},
oncreate(){...}
}
Or, on a global basis by adding {noPreserveState: true}
to hotOptions
. For example:
{
test: /\.(html|svelte)$/,
exclude: /node_modules/,
use: [
{
loader: 'svelte-loader',
options: {
hotReload: true,
hotOptions: {
noPreserveState: true
}
}
}
]
}
Please Note: If you are using svelte/store
, noPreserveState
has no effect on store
properties. Neither locally, nor globally.
If you rely on any external dependencies (files required in a preprocessor for example) you might want to watch these files for changes and re-run svelte compile.
Webpack allows loader dependencies to trigger a recompile. svelte-loader exposes this API via options.externalDependencies
.
For example:
...
const variables = path.resolve('./variables.js');
...
{
test: /\.(html|svelte)$/,
use: [
{
loader: 'svelte-loader',
options: {
externalDependencies: [variables]
}
}
]
}
MIT
2.13.2
compileOptions.filename
(#79)FAQs
A webpack loader for svelte
The npm package svelte-loader receives a total of 25,408 weekly downloads. As such, svelte-loader popularity was classified as popular.
We found that svelte-loader demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 5 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
At its inaugural meeting, the JSR Working Group outlined plans for an open governance model and a roadmap to enhance JavaScript package management.
Security News
Research
An advanced npm supply chain attack is leveraging Ethereum smart contracts for decentralized, persistent malware control, evading traditional defenses.
Security News
Research
Attackers are impersonating Sindre Sorhus on npm with a fake 'chalk-node' package containing a malicious backdoor to compromise developers' projects.