UNPKG

shopify-theme-lab-reloader

Version:
136 lines (109 loc) 5.09 kB
<!-- logo (start) --> <p align="center"> <img src=".github/img/logo-reloader.svg" width="350px"> </p> <!-- logo (end) --> <!-- title / description (start) --> <h2 align="center">Shopify Theme Lab Reloader</h2> Plugin for reloading a remote Shopify theme during development. It's included by default in [Shopify Theme Lab](https://github.com/uicrooks/shopify-theme-lab) versions prior to 4. <!-- title / description (end) --> <!-- how it works (start) --> ## How it works The `server.js` script runs an HTTP server, as well as a WebSocket server, locally. The HTTP server listens for requests, sent from the `shopify:watch` task (which is the default Shopify Them Kit [watch task](https://shopify.dev/tools/theme-kit/command-reference#watch)) and communicates via WebSocket connection with the `client.js` scripts. The `client.js` scripts listen for reload messages sent from the `server.js` script and reload the pages when needed. If the connection between a client and server is lost, the client tries every couple of seconds to reconnect to the server. <!-- how it works (end) --> <!-- installation (start) --> ## Installation ### npm ```sh npm install shopify-theme-lab-reloader --save-dev ``` ### yarn ```sh yarn add shopify-theme-lab-reloader --dev ``` <!-- installation (end) --> <!-- setup (start) --> ## Setup Use one of the following methods. ### Webpack Include the `client.autoload.js` script in the `entry` array of `webpack.dev.js`: ```js { entry: [ ... path.resolve(__dirname, '../../node_modules/shopify-theme-lab-reloader/client.autoload') ] } ``` ### JavaScript Include the `client.js` script in one of the JavaScript files and initialize the client: ```js import ReloaderClient from 'shopify-theme-lab-reloader/client' if (process.env.NODE_ENV === 'development') new ReloaderClient() ``` ## Package.json Your `package.json` file should look something like this: ```json { "config": { "reloader": { "serverPort": 5000, "webSocketPort": 5050, "delay": 2000, "indicator": true } }, "scripts": { "start": "npm-run-all --parallel --silent --race dev reloader shopify:watch", "reloader": "node node_modules/shopify-theme-lab-reloader", "shopify:watch": "cross-env-shell shopify-themekit watch --env=dev --allow-live --config .config/shopify/shopify.dev.yml --notify=http://localhost:$npm_package_config_reloader_serverPort/reload" } } ``` <!-- setup (end) --> <!-- secure websocket conection (start) --> ## Secure WebSocket connection Certain browsers might have difficulties running an insecure WebSocket connection when visiting a secure site (like Firefox). This breaks the Reloader functionality since it runs on an insecure connection. To run a secure connection follow these steps: 1. Install [openssl](https://www.openssl.org) (Included in [Git Bash command line for windows](https://gitforwindows.org)) 2. Go to the root directory of your project. Generate a certificate and a private key ```sh $ openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout key.pem -out cert.pem ``` 3. Add `*.pem` to your `.gitignore` file 4. Add `webSocketSecure` setting to your Reloader config inside `package.json` ```json { "config": { "reloader": { "...": "", "webSocketPort": 5050, "webSocketSecure": true } } } ``` 5. Start your project with `npm run start` 6. Visit [https://localhost:5050](https://localhost:5050) or the port you specified as `webSocketPort` and accept the warning presented by your browser (usually under “Advanced”). You should do it once to set an exception. Close the page. Now Reloader should run on a secure connection. By default, Reloader will look for `cert.pem` and `key.pem` files in your project root directory. If you want to change the name or location of these files, you can do it by providing additional parameters for the `reloader` task inside `package.json` ```json { "scripts": { "reloader": "cross-env CERT=cert.pem KEY=key.pem node node_modules/shopify-theme-lab-reloader" } } ``` <!-- secure websocket conection (end) --> <!-- settings (start) --> ## Settings Settings and ports for the plugin can be adjusted in the `package.json` file of your Theme Lab project. | Option | Description | Possible values | Default value | | - | - | - | - | | serverPort | the localhost port `shopify:watch` task and `server` use to communicate | Number | 5000 | | webSocketPort | the localhost port `server` and `clients` use to communicate | Number | 5050 | | webSocketSecure | run a secure webSocket connection | true, false | false | | delay | auto-reload needs a slight delay before reloading the remote site, so all newly uploaded files will be loaded. Values between `1600`ms and `2000`ms seem to work well | Number | 2000 | | indicator | display a visual status indicator on your page when the connection changes | true, false, "light" | false | <!-- settings (end) -->